﻿-- =============================================
-- Description:	<>
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('[dbo].[sp_TantargyfelosztasImport]') IS NOT NULL
BEGIN
	DROP PROCEDURE [dbo].[sp_TantargyfelosztasImport]
END
GO

CREATE PROCEDURE [dbo].[sp_TantargyfelosztasImport]
	 @pImportJson	NVARCHAR(MAX)
	,@pIsTorles		BIT
	,@pUserId		INT
	,@pTanevId		INT
	,@pIntezmenyId	INT

AS
BEGIN

	SET NOCOUNT ON;

	DECLARE
		 @tableNameList nvarchar(2000)	= 'T_TANTARGY_OSSZES,T_OSZTALYCSOPORT_OSSZES'
		,@actualJson NVARCHAR(MAX)		= ''
	 
		,@lastChangedDateTime DATETIME	= GETDATE()
		,@modifierId INT				= @pUserId
	
	--Ha Törölnünk is kell akkor azzal kezdünk!
	IF (@pIsTorles = 1)
		BEGIN
			--Foglalkozás kapcsolatainak törlése
			UPDATE 
				OrarendiOra
			SET 
				 OrarendiOra.C_FOGLALKOZASID		= NULL
				,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 EXISTS 
					(SELECT TOP 1 
						ID 
					FROM 
						T_FOGLALKOZAS_OSSZES Foglalkozas 
					WHERE 
							Foglalkozas.ID				= OrarendiOra.C_FOGLALKOZASID				
						AND Foglalkozas.C_INTEZMENYID	= @pIntezmenyId
						AND	Foglalkozas.C_TANEVID		= @pTanevId
						AND Foglalkozas.TOROLT			= 'F'
						AND Foglalkozas.C_IMPORTALT		= 'T'
					)
				
			UPDATE 
				TanitasiOra
			SET 
				 TanitasiOra.C_FOGLALKOZASID		= 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_FOGLALKOZAS_OSSZES Foglalkozas 
					WHERE 
							Foglalkozas.ID				= TanitasiOra.C_FOGLALKOZASID				
						AND Foglalkozas.C_INTEZMENYID	= @pIntezmenyId
						AND	Foglalkozas.C_TANEVID		= @pTanevId
						AND Foglalkozas.TOROLT			= 'F'
						AND Foglalkozas.C_IMPORTALT		= 'T'
					)
				
			UPDATE 
				TanuloMulasztasStatisztika
			SET 
				 TanuloMulasztasStatisztika.C_TARGYMULASZTASSTATISZTIKAIID	= NULL
				,TanuloMulasztasStatisztika.SERIAL							= TanuloMulasztasStatisztika.SERIAL + 1
				,TanuloMulasztaSstatisztika.LASTCHANGED						= @lastChangedDateTime
				,TanuloMulasztasStatisztika.MODIFIER						= @modifierId
			FROM 
				T_TANULOTARGYMULASZTASSTATISZT_OSSZES TanuloMulasztasStatisztika
			WHERE
					TanuloMulasztasStatisztika.C_INTEZMENYID		= @pIntezmenyId
				AND	TanuloMulasztasStatisztika.C_TANEVID			= @pTanevId
				AND TanuloMulasztasStatisztika.TOROLT				= 'F'
				AND EXISTS 
					(SELECT TOP 1 
						ID 
					FROM 
						T_FOGLALKOZAS_OSSZES Foglalkozas 
					WHERE 
							Foglalkozas.ID				= TanuloMulasztasStatisztika.C_TARGYMULASZTASSTATISZTIKAIID				
						AND Foglalkozas.C_INTEZMENYID	= @pIntezmenyId
						AND	Foglalkozas.C_TANEVID		= @pTanevId
						AND Foglalkozas.TOROLT			= 'F'
						AND Foglalkozas.C_IMPORTALT		= 'T'
					)
				
			DELETE 
				TeremFoglalkozas
			FROM 
				T_TEREM_FOGLALKOZAS TeremFoglalkozas
			WHERE
				EXISTS 
					(SELECT TOP 1 
						ID 
					FROM 
						T_FOGLALKOZAS_OSSZES Foglalkozas 
					WHERE 
							Foglalkozas.ID				= TeremFoglalkozas.C_FOGLALKOZASID				
						AND Foglalkozas.C_INTEZMENYID	= @pIntezmenyId
						AND	Foglalkozas.C_TANEVID		= @pTanevId
						AND Foglalkozas.TOROLT			= 'F'
						AND Foglalkozas.C_IMPORTALT		= 'T'
					)
					

			--Foglalkozások törlése
			UPDATE 
				Foglalkozas
			SET 
				 Foglalkozas.TOROLT			= 'T'
				,Foglalkozas.SERIAL			= Foglalkozas.SERIAL + 1
				,Foglalkozas.LASTCHANGED	= @lastChangedDateTime
				,Foglalkozas.MODIFIER		= @modifierId
			FROM 
				T_FOGLALKOZAS_OSSZES Foglalkozas
			WHERE
					Foglalkozas.C_TANEVID		= @pTanevId
				AND Foglalkozas.C_INTEZMENYID	= @pIntezmenyId
				AND Foglalkozas.TOROLT			= 'F'
				AND Foglalkozas.C_IMPORTALT		= 'T'
		END
		
	--NOTE: A törlés itt azért false, mert a T_TANTARGY_OSSZES és a T_OSZTALYCSOPORT_OSSZES view-ból nem törlünk importnál
	EXECUTE [dbo].[sp_DynamicImportJsonSplit] @pImportJson = @pImportJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 0, @pTableNameList = @tableNameList

	--Osztályok beszúrása
	SET @actualJson = ' { "ImportJson":{ "T_OSZTALY_OSSZES":' +
		(SELECT
			 Osztaly.OsztalyCsoportId		ID
			,Osztaly.						C_KEPZESIFORMA
			,Osztaly.						C_TECHNIKAIOSZTALY
			,Osztaly.						C_GYOGYPEDAGOGIAI
			,Osztaly.						C_KETTANNYELVU
			,Osztaly.						C_LOGOPEDIAI
			,Osztaly.						C_NEMZETISEGI
			,Osztaly.						C_NYELVIELOKESZITO
			,Osztaly.						C_SPORT
			,Osztaly.						C_ALINTEZMENYID
			,Osztaly.						C_ALTANEVID
			,Osztaly.						TOROLT
			,Osztaly.						SERIAL
			,Osztaly.						LASTCHANGED
			,Osztaly.						CREATED
			,Osztaly.						MODIFIER
			,Osztaly.						CREATOR
			,Osztaly.						ELOZOTANEVIREKORDID
			,Osztaly.						NNID
		FROM
			(SELECT 
				 OsztalyJsonData.*
				,OsztalyCsoport.ID		OsztalyCsoportId			
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_OSZTALY_OSSZES')
				WITH (
					 ID						INT				'$.ID'
					,C_KEPZESIFORMA			INT				'$.C_KEPZESIFORMA'
					,C_TECHNIKAIOSZTALY		CHAR(1)			'$.C_TECHNIKAIOSZTALY'
					,C_GYOGYPEDAGOGIAI		CHAR(1)			'$.C_GYOGYPEDAGOGIAI'
					,C_KETTANNYELVU			CHAR(1)			'$.C_KETTANNYELVU'
					,C_LOGOPEDIAI			CHAR(1)			'$.C_LOGOPEDIAI'
					,C_NEMZETISEGI			CHAR(1)			'$.C_NEMZETISEGI'
					,C_NYELVIELOKESZITO		CHAR(1)			'$.C_NYELVIELOKESZITO'
					,C_SPORT				CHAR(1)			'$.C_SPORT'
					,C_ALINTEZMENYID		INT				'$.C_INTEZMENYID'
					,C_ALTANEVID			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'
					,OsztalyCsoportNev		NVARCHAR(255)	'$.OsztalyCsoportNev'				
				) OsztalyJsonData 
			LEFT JOIN
				T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON 
						OsztalyCsoport.C_NEV			= OsztalyJsonData.OsztalyCsoportNev
					AND OsztalyCsoport.C_TANEVID		= @pTanevId
					AND OsztalyCsoport.C_INTEZMENYID	= @pIntezmenyId
					AND OsztalyCsoport.TOROLT			= 'F'
					AND OsztalyJsonData.ID IS NULL
			) AS Osztaly	
		FOR JSON PATH,INCLUDE_NULL_VALUES)

	SET @actualJson = @actualJson + ' } }'

	--NOTE: A törlés itt azért false, mert a T_OSZTALY_OSSZES view-ból nem törlünk importnál
	EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 1
	
	--Csoportok beszúrása 
	SET @actualJson = ' { "ImportJson":{ "T_CSOPORT_OSSZES":' +
		(SELECT
			 Csoport.OsztalyCsoportId		ID
			,Csoport.						C_TIPUSA
			,Csoport.OsztalybontasId		C_OSZTALYBONTASID
			,Csoport.						C_ALINTEZMENYID
			,Csoport.						C_ALTANEVID
			,Csoport.						TOROLT
			,Csoport.						SERIAL
			,Csoport.						LASTCHANGED
			,Csoport.						CREATED
			,Csoport.						MODIFIER
			,Csoport.						CREATOR	
			,Csoport.						NNID
			,Csoport.						ELOZOTANEVIREKORDID
		FROM
			(SELECT   
				 CsoportJsonData.*
				,OsztalyCsoport.ID		OsztalyCsoportId	
				,Osztalybontas.ID		OsztalybontasId
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_CSOPORT_OSSZES')
				WITH (
					 ID						INT				'$.ID'
					,C_TIPUSA				INT				'$.C_TIPUSA'
					,C_OSZTALYBONTASID		INT				'$.C_OSZTALYBONTASID'
					,C_ALINTEZMENYID		INT				'$.C_INTEZMENYID'
					,C_ALTANEVID			INT				'$.C_TANEVID'
					,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'
					,OsztalyCsoportNev		NVARCHAR(255)	'$.OsztalyCsoportNev'
					,OsztalybontasNev		NVARCHAR(255)	'$.OsztalybontasNev'
				) CsoportJsonData 
			LEFT JOIN
				T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON 
						OsztalyCsoport.C_NEV			= CsoportJsonData.OsztalyCsoportNev
					AND OsztalyCsoport.C_TANEVID		= @pTanevId
					AND OsztalyCsoport.C_INTEZMENYID	= @pIntezmenyId
					AND OsztalyCsoport.TOROLT			= 'F'
					AND CsoportJsonData.ID IS NULL
			LEFT JOIN
				T_OSZTALYCSOPORT_OSSZES Osztalybontas ON 
						Osztalybontas.C_NEV				= CsoportJsonData.OsztalybontasNev
					AND Osztalybontas.C_TANEVID			= @pTanevId
					AND Osztalybontas.C_INTEZMENYID		= @pIntezmenyId
					AND Osztalybontas.TOROLT			= 'F'
					AND CsoportJsonData.ID IS NULL
			) AS Csoport
		FOR JSON PATH,INCLUDE_NULL_VALUES)

	SET @actualJson = @actualJson + ' } }'
	
	--NOTE: A törlés itt azért false, mert a T_CSOPORT_OSSZES view-ból nem törlünk importnál
	EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId ,@pInsertAlways = 1

	--Foglalkozások beszúrása
	SET @actualJson = ' { "ImportJson":{ "T_FOGLALKOZAS_OSSZES":' +
		(SELECT
			 Foglalkozas.					ID					
			,Foglalkozas.					C_FOGLALKOZASTIPUSA
			,Foglalkozas.					C_ORASZAM
			,Foglalkozas.					C_NEV
			,Foglalkozas.					C_ERTEKELESKELL
			,Foglalkozas.					C_MULASZTASKELL
			,Foglalkozas.					C_TANARFELVEHETI
			,Foglalkozas.TantargyId			C_TANTARGYID
			,Foglalkozas.OsztalyCsoportId	C_OSZTALYCSOPORTID
			,Foglalkozas.TanarId			C_TANARID
			,Foglalkozas.					C_INTEZMENYID
			,Foglalkozas.					C_TANEVID
			,Foglalkozas.					C_IMPORTALT
			,Foglalkozas.					TOROLT
			,Foglalkozas.					SERIAL
			,Foglalkozas.					LASTCHANGED
			,Foglalkozas.					CREATED
			,Foglalkozas.					MODIFIER
			,Foglalkozas.					CREATOR
			,Foglalkozas.					ELOZOTANEVIREKORDID
			,Foglalkozas.					NNID
		FROM 
			(SELECT   
				 FoglalkozasJsonData.*
				,OsztalyCsoport.ID		OsztalyCsoportId
				,Felhasznalo.ID			TanarId
				,Tantargy.ID			TantargyId
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_FOGLALKOZAS_OSSZES')
				WITH (
					 ID						INT				'$.ID'
					,C_FOGLALKOZASTIPUSA	INT				'$.C_FOGLALKOZASTIPUSA'
					,C_ORASZAM				NUMERIC(10,2)	'$.C_ORASZAM'
					,C_NEV					NVARCHAR(255)	'$.C_NEV'
					,C_ERTEKELESKELL		CHAR(1)			'$.C_ERTEKELESKELL'
					,C_MULASZTASKELL		CHAR(1)			'$.C_MULASZTASKELL'
					,C_TANARFELVEHETI		CHAR(1)			'$.C_TANARFELVEHETI'
					,C_TANTARGYID			INT				'$.C_TANTARGYID'
					,C_OSZTALYCSOPORTID		INT				'$.C_OSZTALYCSOPORTID'
					,C_TANARID				INT				'$.C_TANARID'
					,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'
					,ELOZOTANEVIREKORDID	INT				'$.ELOZOTANEVIREKORDID'
					,NNID					INT				'$.NNID'
					,OsztalyCsoportNev		NVARCHAR(255)	'$.OsztalyCsoportNev'
					,TanarNev				NVARCHAR(255)	'$.TanarNev'
					,TanarSzuletesiIdo		NVARCHAR(255)	'$.TanarSzuletesiIdo'
					,TantargyNev			NVARCHAR(255)	'$.TantargyNev'						
				) FoglalkozasJsonData 							
			LEFT JOIN
				T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON 
						OsztalyCsoport.C_NEV			= FoglalkozasJsonData.OsztalyCsoportNev
					AND OsztalyCsoport.C_TANEVID		= @pTanevId
					AND OsztalyCsoport.C_INTEZMENYID	= @pIntezmenyId
					AND OsztalyCsoport.TOROLT			= 'F'
			LEFT JOIN 
				T_FELHASZNALO_OSSZES Felhasznalo ON 
						Felhasznalo.C_NYOMTATASINEV		= FoglalkozasJsonData.TanarNev
					AND	(FoglalkozasJsonData.TanarSzuletesiIdo IS NULL 
						OR Felhasznalo.C_SZULETESIDATUM	= FoglalkozasJsonData.TanarSzuletesiIdo)
					AND Felhasznalo.C_TANEVID			= @pTanevId
					AND Felhasznalo.C_INTEZMENYID		= @pIntezmenyId
					AND Felhasznalo.TOROLT				= 'F'
            INNER JOIN
                T_ALKALMAZOTT_OSSZES Alkalmazott ON				
						Alkalmazott.ID = Felhasznalo.ID
					AND	Alkalmazott.C_ALTANEVID			= @pTanevId
					AND Alkalmazott.C_ALINTEZMENYID		= @pIntezmenyId
					AND Alkalmazott.TOROLT				= 'F'
			LEFT JOIN
				T_TANTARGY_OSSZES Tantargy ON 
						Tantargy.C_NEV					= FoglalkozasJsonData.TantargyNev
					AND Tantargy.C_TANEVID				= @pTanevId
					AND Tantargy.C_INTEZMENYID			= @pIntezmenyId
					AND Tantargy.TOROLT					= 'F'
			) AS Foglalkozas
		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

END


GO

