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

DROP PROCEDURE IF EXISTS [dbo].[uspTanuloKifirImport]
GO

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

AS
BEGIN

	SET NOCOUNT ON;	

	DECLARE
		 @tableNameList				NVARCHAR(2000)	= 'T_FELHASZNALO_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
			--TODO szikoraz: 
			PRINT 'need to implement!!!'
		END
	  
	EXECUTE [dbo].[sp_DynamicImportJsonSplit] @pImportJson = @pImportJson , @pIsTorles = @pIsTorles, @pUserId = @pUserId, @pInsertAlways = 0, @pTableNameList = @tableNameList

	--Tanulók beszúrása
	SET @actualJson = ' { "ImportJson":{ "T_TANULO_OSSZES":' +
		(SELECT
			 Tanulo.FelhasznaloId		ID
			,Tanulo.					C_TANTERVID
			
			,Tanulo.					C_ALLAMIGONDOZOTT
			,Tanulo.					C_BEILLESZKEDESINEHEZSEG
			,Tanulo.					C_BEJARO
			,Tanulo.					C_EVISMETLO
			,Tanulo.					C_JOGVISZONYATSZUNETELTETO
			,Tanulo.					C_MAGANTANULO
			,Tanulo.					C_POLGARISZERZODESES
			,Tanulo.					C_SZAKMAIGYAKORLATON
			,Tanulo.					C_SZOCIALISTAMOGATAS
			,Tanulo.					C_TANDIJATFIZETO
			,Tanulo.					C_TANKOTELEZETT
			,Tanulo.					C_TANULOSZERZODESES
			,Tanulo.					C_TERITESIDIJATFIZETO
			,Tanulo.					C_TESTNEVELESTIPUSA
			,Tanulo.					C_VENDEG
			,Tanulo.					C_BTMPROBLEMAS
			,Tanulo.					C_DIAKSPORTKOROS
			,Tanulo.					C_HALMOZOTTANFOGYATEKOS
			,Tanulo.					C_KOLLEGIUMIELLATASOS
			,Tanulo.					C_SAJATOSNEVELESU
			,Tanulo.					C_VESZELYEZTETETT
			,Tanulo.					C_BEILLESZKEDESIPROBLEMAVALKUZ
			,Tanulo.					C_MAGATARTASIPROBLEMAVALKUZD
			,Tanulo.					C_TANULASIPROBLEMADISZGRAFIA
			,Tanulo.					C_TANULASIPROBLEMAVALKUZD
			,Tanulo.					C_TANULASIPROBLEMAVALKUZDDISZK
			,Tanulo.					C_TANULASIPROBLEMAVALKUZDDISZL
			,Tanulo.					C_KOZEPFOKUOKTATASBATIZENHATOD
			,Tanulo.					C_MENEDEKJOGGALRENDELKEZO
			,Tanulo.					C_EGYEBDONTO
			,Tanulo.					C_MEGALLAPODASOS
			,Tanulo.					C_OSZTV
			,Tanulo.					C_SZETVAGAZAT
			,Tanulo.					C_SZKTV
			,Tanulo.					C_TECHNIKUSIEVFOLYAM
			,Tanulo.					C_EGYUTTMUKODESES
			,Tanulo.					C_ISKOLAIKERETEKKOZOTT
			,Tanulo.					C_ISSZAKMAIGYAKORLATHIANY
			,Tanulo.					C_ISKIFIRIMPORTALT
			,Tanulo.					C_FELVETELTANEVEID	

			,Tanulo.					C_ALINTEZMENYID
			,Tanulo.					C_ALTANEVID
			,Tanulo.					TOROLT
			,Tanulo.					SERIAL
			,Tanulo.					LASTCHANGED
			,Tanulo.					CREATED
			,Tanulo.					MODIFIER
			,Tanulo.					CREATOR
			,Tanulo.					ELOZOTANEVIREKORDID
			,Tanulo.					NNID
		FROM
			(SELECT   
				 TanuloJsonData.*
				,Felhasznalo.ID			FelhasznaloId
			
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_TANULO_OSSZES')
				WITH (
					 ID								INT				'$.ID'
					,C_TANTERVID					INT				'$.C_TANTERVID'
					,C_ALLAMIGONDOZOTT				CHAR(1)			'$.C_ALLAMIGONDOZOTT'
					,C_BEILLESZKEDESINEHEZSEG		CHAR(1)			'$.C_BEILLESZKEDESINEHEZSEG'
					,C_BEJARO						CHAR(1)			'$.C_BEJARO'
					,C_EVISMETLO					CHAR(1)			'$.C_EVISMETLO'
					,C_JOGVISZONYATSZUNETELTETO		CHAR(1)			'$.C_JOGVISZONYATSZUNETELTETO'
					,C_MAGANTANULO					CHAR(1)			'$.C_MAGANTANULO'
					,C_POLGARISZERZODESES			CHAR(1)			'$.C_POLGARISZERZODESES'
					,C_SZAKMAIGYAKORLATON			CHAR(1)			'$.C_SZAKMAIGYAKORLATON'
					,C_SZOCIALISTAMOGATAS			CHAR(1)			'$.C_SZOCIALISTAMOGATAS'
					,C_TANDIJATFIZETO				CHAR(1)			'$.C_TANDIJATFIZETO'
					,C_TANKOTELEZETT				CHAR(1)			'$.C_TANKOTELEZETT'
					,C_TANULOSZERZODESES			CHAR(1)			'$.C_TANULOSZERZODESES'
					,C_TERITESIDIJATFIZETO			CHAR(1)			'$.C_TERITESIDIJATFIZETO'
					,C_TESTNEVELESTIPUSA			INT				'$.C_TESTNEVELESTIPUSA'
					,C_VENDEG						CHAR(1)			'$.C_VENDEG'
					,C_BTMPROBLEMAS					CHAR(1)			'$.C_BTMPROBLEMAS'
					,C_DIAKSPORTKOROS				CHAR(1)			'$.C_DIAKSPORTKOROS'
					,C_HALMOZOTTANFOGYATEKOS		CHAR(1)			'$.C_HALMOZOTTANFOGYATEKOS'
					,C_KOLLEGIUMIELLATASOS			CHAR(1)			'$.C_KOLLEGIUMIELLATASOS'
					,C_SAJATOSNEVELESU				CHAR(1)			'$.C_SAJATOSNEVELESU'
					,C_VESZELYEZTETETT				CHAR(1)			'$.C_VESZELYEZTETETT'
					,C_BEILLESZKEDESIPROBLEMAVALKUZ	CHAR(1)			'$.C_BEILLESZKEDESIPROBLEMAVALKUZ'
					,C_MAGATARTASIPROBLEMAVALKUZD	CHAR(1)			'$.C_MAGATARTASIPROBLEMAVALKUZD'
					,C_TANULASIPROBLEMADISZGRAFIA	CHAR(1)			'$.C_TANULASIPROBLEMADISZGRAFIA'
					,C_TANULASIPROBLEMAVALKUZD		CHAR(1)			'$.C_TANULASIPROBLEMAVALKUZD'
					,C_TANULASIPROBLEMAVALKUZDDISZK	CHAR(1)			'$.C_TANULASIPROBLEMAVALKUZDDISZK'
					,C_TANULASIPROBLEMAVALKUZDDISZL	CHAR(1)			'$.C_TANULASIPROBLEMAVALKUZDDISZL'
					,C_KOZEPFOKUOKTATASBATIZENHATOD	CHAR(1)			'$.C_KOZEPFOKUOKTATASBATIZENHATOD'
					,C_MENEDEKJOGGALRENDELKEZO		CHAR(1)			'$.C_MENEDEKJOGGALRENDELKEZO'
					,C_EGYEBDONTO					CHAR(1)			'$.C_EGYEBDONTO'
					,C_MEGALLAPODASOS				CHAR(1)			'$.C_MEGALLAPODASOS'
					,C_OSZTV						CHAR(1)			'$.C_OSZTV'
					,C_SZETVAGAZAT					CHAR(1)			'$.C_SZETVAGAZAT'
					,C_SZKTV						CHAR(1)			'$.C_SZKTV'
					,C_TECHNIKUSIEVFOLYAM			CHAR(1)			'$.C_TECHNIKUSIEVFOLYAM'
					,C_EGYUTTMUKODESES				CHAR(1)			'$.C_EGYUTTMUKODESES'
					,C_ISKOLAIKERETEKKOZOTT			CHAR(1)			'$.C_ISKOLAIKERETEKKOZOTT'
					,C_ISSZAKMAIGYAKORLATHIANY		CHAR(1)			'$.C_ISSZAKMAIGYAKORLATHIANY'
					,C_ISKIFIRIMPORTALT				CHAR(1)			'$.C_ISKIFIRIMPORTALT'
					,C_FELVETELTANEVEID				INT				'$.C_FELVETELTANEVEID'

					,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'
					
					,Vezeteknev						NVARCHAR(255)	'$.Vezeteknev'
					,Keresztnev						NVARCHAR(255)	'$.Keresztnev'
					,SzuletesiHely					NVARCHAR(50)	'$.SzuletesiHely'
					,SzuletesiIdo					DATETIME		'$.SzuletesiIdo'
					,OktatasiAzonosito				NVARCHAR(20)	'$.OktatasiAzonosito'
				) TanuloJsonData
			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_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.Vezeteknev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.Keresztnev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.SzuletesiHely)
					AND Felhasznalo.C_SZULETESIDATUM	= TanuloJsonData.SzuletesiIdo
					AND Felhasznalo.C_OKTATASIAZONOSITO	= TanuloJsonData.OktatasiAzonosito
					AND Felhasznalo.C_INTEZMENYID		= @pIntezmenyId
					AND Felhasznalo.C_TANEVID			= @pTanevId
					AND Felhasznalo.TOROLT				= 'F'
					AND TanuloJsonData.ID IS NULL
			) AS Tanulo
		FOR JSON PATH,INCLUDE_NULL_VALUES)

	SET @actualJson = @actualJson + ' } }'
	
	--NOTE: A törlés itt azért false, mert a T_TANULO_OSSZES view-ból korábban elvégeztük a törlést.
	EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 1

	--Címek beszúrása
	SET @actualJson = ' { "ImportJson":{ "T_CIM_OSSZES":' +
		(SELECT
			 Cim.					ID
			,Cim.					C_CIMTIPUSA
			,Cim.					C_IRANYITOSZAM
			,Cim.					C_VAROS
			,Cim.					C_KOZTERULET
			,Cim.					C_KOZTERULETJELLEGE
			,Cim.					C_HAZSZAM
			,Cim.					C_ORSZAG
			,Cim.					C_ALAPERTELMEZETT
			,Cim.					C_EMELET
			,Cim.					C_AJTO
			,Cim.FelhasznaloId		C_FELHASZNALOID
			
			,Cim.					C_INTEZMENYID
			,Cim.					C_TANEVID
			,Cim.					TOROLT
			,Cim.					SERIAL
			,Cim.					LASTCHANGED
			,Cim.					CREATED
			,Cim.					MODIFIER
			,Cim.					CREATOR
			,Cim.					ELOZOTANEVIREKORDID
			,Cim.					NNID
		FROM 
			(SELECT   
				 CimJsonData.*
				,Felhasznalo.ID			FelhasznaloId
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_CIM_OSSZES')
				WITH (
					 ID						INT				'$.ID'
					,C_CIMTIPUSA			INT				'$.C_CIMTIPUSA'
					,C_IRANYITOSZAM			NVARCHAR(20)	'$.C_IRANYITOSZAM'
					,C_VAROS				NVARCHAR(50)	'$.C_VAROS'
					,C_KOZTERULET			NVARCHAR(40)	'$.C_KOZTERULET'
					,C_KOZTERULETJELLEGE	INT				'$.C_KOZTERULETJELLEGE'
					,C_HAZSZAM				NVARCHAR(30)	'$.C_HAZSZAM'
					,C_ORSZAG				INT				'$.C_ORSZAG'
					,C_ALAPERTELMEZETT		CHAR(1)			'$.C_ALAPERTELMEZETT'
					,C_EMELET				NVARCHAR(40)	'$.C_EMELET'
					,C_AJTO					NVARCHAR(30)	'$.C_AJTO'
					
					,C_INTEZMENYID			INT				'$.C_INTEZMENYID'
					,C_TANEVID				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'
					
					,Vezeteknev				NVARCHAR(255)	'$.Vezeteknev'
					,Keresztnev				NVARCHAR(255)	'$.Keresztnev'
					,SzuletesiHely			NVARCHAR(50)	'$.SzuletesiHely'
					,SzuletesiIdo			DATETIME		'$.SzuletesiIdo'
					,OktatasiAzonosito		NVARCHAR(20)	'$.OktatasiAzonosito'				
				) CimJsonData
			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_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.Vezeteknev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.Keresztnev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.SzuletesiHely)
					AND Felhasznalo.C_SZULETESIDATUM	= CimJsonData.SzuletesiIdo
					AND Felhasznalo.C_OKTATASIAZONOSITO	= CimJsonData.OktatasiAzonosito
					AND Felhasznalo.C_INTEZMENYID		= @pIntezmenyId
					AND Felhasznalo.C_TANEVID			= @pTanevId
					AND Felhasznalo.TOROLT				= 'F'
			) AS Cim
		FOR JSON PATH,INCLUDE_NULL_VALUES)

	SET @actualJson = @actualJson + ' } }'
	
	--NOTE: A törlés itt azért false, mert a T_CIM_OSSZES view-ból korábban elvégeztük a törlést.
	EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 0

	--Emailek beszúrása
	SET @actualJson = ' { "ImportJson":{ "T_EMAIL_OSSZES":' +
		(SELECT
			 Email.					ID
			,Email.					C_EMAILTIPUSA
			,Email.					C_EMAILCIM
			,Email.					C_ALAPERTELMEZETT
			,Email.					C_ISPUBLIC
			,Email.FelhasznaloId	C_FELHASZNALOID
			
			,Email.					C_INTEZMENYID
			,Email.					C_TANEVID
			,Email.					TOROLT
			,Email.					SERIAL
			,Email.					LASTCHANGED
			,Email.					CREATED
			,Email.					MODIFIER
			,Email.					CREATOR
			,Email.					ELOZOTANEVIREKORDID
			,Email.					NNID
		FROM 
			(SELECT   
				 EmailJsonData.*
				,Felhasznalo.ID			FelhasznaloId
			FROM OPENJSON(@pImportJson,  N'lax $.ImportJson.T_EMAIL_OSSZES')
				WITH (
					 ID						INT				'$.ID'
					,C_EMAILTIPUSA			INT				'$.C_EMAILTIPUSA'
					,C_EMAILCIM				NVARCHAR(200)	'$.C_EMAILCIM'
					,C_ALAPERTELMEZETT		CHAR(1)			'$.C_ALAPERTELMEZETT'
					,C_ISPUBLIC				CHAR(1)			'$.C_ISPUBLIC'
					
					,C_INTEZMENYID			INT				'$.C_INTEZMENYID'
					,C_TANEVID				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'
					
					,Vezeteknev				NVARCHAR(255)	'$.Vezeteknev'
					,Keresztnev				NVARCHAR(255)	'$.Keresztnev'
					,SzuletesiHely			NVARCHAR(50)	'$.SzuletesiHely'
					,SzuletesiIdo			DATETIME		'$.SzuletesiIdo'
					,OktatasiAzonosito		NVARCHAR(20)	'$.OktatasiAzonosito'				
				) EmailJsonData
			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_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.Vezeteknev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.Keresztnev)
					AND	LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.SzuletesiHely)
					AND Felhasznalo.C_SZULETESIDATUM	= EmailJsonData.SzuletesiIdo
					AND Felhasznalo.C_OKTATASIAZONOSITO	= EmailJsonData.OktatasiAzonosito
					AND Felhasznalo.C_INTEZMENYID		= @pIntezmenyId
					AND Felhasznalo.C_TANEVID			= @pTanevId
					AND Felhasznalo.TOROLT				= 'F'
			) AS Email
		FOR JSON PATH,INCLUDE_NULL_VALUES)

	SET @actualJson = @actualJson + ' } }'
	
	--NOTE: A törlés itt azért false, mert a T_EMAIL_OSSZES view-ból korábban elvégeztük a törlést.
	EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 0

END


GO

