﻿-- =============================================
-- Description: A nebuló lista importálása XML-ből
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


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


CREATE PROCEDURE [dbo].[sp_NebuloImport]
	-- Add the parameters for the stored procedure here
	 @pNebuloListXml		XML
	,@pIntezmenyId			INT
	,@pTanevId				INT
	,@pUserId				INT
	,@pNebuloImportTipusId	INT
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
	SET NOCOUNT ON;

	-- XML paraméter értelmezése
	SELECT
		-- MERGE-höz adatok
		 NebuloID =												0
		,IsExistingNebulo =										0

		--Egyszerű import adatok
		,Vezeteknev =											Nebulo.value('(Vezeteknev)[1]', 'NVARCHAR(255)')
		,Keresztnev =											Nebulo.value('(Keresztnev)[1]', 'NVARCHAR(255)')
		,AnyjaVezetekneve =										Nebulo.value('(AnyjaVezetekneve)[1]', 'NVARCHAR(255)')
		,AnyjaKeresztneve =										Nebulo.value('(AnyjaKeresztneve)[1]', 'NVARCHAR(255)')
		,SzuletesiVezeteknev =									Nebulo.value('(SzuletesiVezeteknev)[1]', 'NVARCHAR(255)')
		,SzuletesiKeresztnev =									Nebulo.value('(SzuletesiKeresztnev)[1]', 'NVARCHAR(255)')
		,SzuletesiOrszag =										Nebulo.value('number((SzuletesiOrszag)[1])', 'INT')
		,SzuletesiHely =										Nebulo.value('(SzuletesiHely)[1]', 'NVARCHAR(50)')
		,SzuletesiIdo =											Nebulo.value('(SzuletesiIdoString)[1]', 'DATETIME')
		,TKCimeAzonos =											Nebulo.value('(TKCimeAzonosString)[1]', 'CHAR(1)')			
		,THCimeAzonos =											Nebulo.value('(THCimeAzonosString)[1]', 'CHAR(1)')	
		,Anyanyelv =											Nebulo.value('number((Anyanyelv)[1])', 'INT')	
		,Allampolgarsag =										Nebulo.value('number((Allampolgarsag)[1])', 'INT')
		,EletvitelszeruOttLakasKorzetes =						Nebulo.value('(EletvitelszeruOttLakasKorzetesString)[1]', 'CHAR(1)')
		,FeladatellatasiHelyId =								Nebulo.value('number((FeladatellatasiHelyId)[1])', 'INT')
		,Tagozat =												Nebulo.value('number((Tagozat)[1])', 'INT')
		,FelvetelStatusza =										Nebulo.value('number((FelvetelStatusza)[1])', 'INT')
		,BTMLetszamSuly =										Nebulo.value('number((BTMLetszamSuly)[1])', 'NUMERIC(10,2)')
		,SNILetszamSuly =										Nebulo.value('number((SNILetszamSuly)[1])', 'NUMERIC(10,2)')

		--Egyszerű import lakcímmel adatok
		,Iranyitoszam =											Nebulo.value('(Iranyitoszam)[1]', 'NVARCHAR(20)')
		,Helyseg =												Nebulo.value('(Helyseg)[1]', 'NVARCHAR(255)')
		,Kozterulet =											Nebulo.value('(Kozterulet)[1]', 'NVARCHAR(40)')
		,KozteruletJelleg =										Nebulo.value('number((KozteruletJelleg)[1])', 'INT')
		,Szam =													Nebulo.value('(Szam)[1]', 'NVARCHAR(30)')
		,Emelet =												Nebulo.value('(Emelet)[1]', 'NVARCHAR(40)')
		,Ajto =													Nebulo.value('(Ajto)[1]', 'NVARCHAR(30)')
	INTO 
		#tempNebuloList
	FROM 	
		@pNebuloListXml.nodes('NebuloImport/NebuloList/Nebulo') AS NebuloList(Nebulo)
  
	-- A létező nebulók ID-ját kitöltjük, és az IsExistingNebulo-t is UPDATE-eljük 4T alapján
	UPDATE 
		tempNebulo
	SET 
		 tempNebulo.NebuloID = nebulo.ID
		,tempNebulo.IsExistingNebulo = IIF(nebulo.ID IS NULL, 0, 1)
	FROM 
		#tempNebuloList tempNebulo
    INNER JOIN 
		T_NEBULO_OSSZES nebulo ON 
			nebulo.C_TANULOCSALADINEVE =				tempNebulo.Vezeteknev AND
			nebulo.C_TANULOUTONEVE =					tempNebulo.Keresztnev AND
			nebulo.C_EDESANYJASZULETESICSALADINEV =		tempNebulo.AnyjaVezetekneve AND
			nebulo.C_EDESANYJASZULETESIUTONEVE =		tempNebulo.AnyjaKeresztneve AND
			nebulo.C_SZULETESIORSZAG =					tempNebulo.SzuletesiOrszag AND
			nebulo.C_SZULETESIHELY =					tempNebulo.SzuletesiHely AND
			nebulo.C_SZULETESIIDO =						tempNebulo.SzuletesiIdo

	BEGIN TRY
		BEGIN TRANSACTION  

			DECLARE @currentDateTime DATETIME 
			SET @currentDateTime = (SELECT GETDATE())

			DECLARE @isUpdateLakcim BIT 
			SET @isUpdateLakcim = CASE WHEN @pNebuloImportTipusId = 1 THEN 1 ELSE 0 END

			-- Nebulók INSERT-je vagy UPDATE-je aka MERGE
			MERGE T_NEBULO_OSSZES nebulo
				USING #tempNebuloList tempNebulo ON 
					tempNebulo.NebuloID = nebulo.ID AND nebulo.C_TANEVID = @pTanevId
				WHEN MATCHED AND tempNebulo.IsExistingNebulo = 1 THEN 
					UPDATE SET
						--Egyszerű import adatok
						 nebulo.C_TANULOCSALADINEVE =				tempNebulo.Vezeteknev
						,nebulo.C_TANULOUTONEVE =					tempNebulo.Keresztnev
						,nebulo.C_EDESANYJASZULETESICSALADINEV =	tempNebulo.AnyjaVezetekneve
						,nebulo.C_EDESANYJASZULETESIUTONEVE =		tempNebulo.AnyjaKeresztneve
						,nebulo.C_SZULETESICSALADINEVE =			tempNebulo.SzuletesiVezeteknev
						,nebulo.C_SZULETESIUTONEVE =				tempNebulo.SzuletesiKeresztnev
						,nebulo.C_SZULETESIORSZAG =					tempNebulo.SzuletesiOrszag
						,nebulo.C_SZULETESIHELY =					tempNebulo.SzuletesiHely
						,nebulo.C_SZULETESIIDO =					tempNebulo.SzuletesiIdo
						--nebulo.C_FELVETELSTATUSZA =				tempNebulo.FelvetelStatusza

						--Egyszerű import lakcímmel adatok
						,nebulo.C_IRANYITOSZAM =					CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Iranyitoszam ELSE nebulo.C_IRANYITOSZAM END
						,nebulo.C_HELYSEGNEV =						CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Helyseg ELSE nebulo.C_HELYSEGNEV END
						,nebulo.C_KOZTERULETNEV =					CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Kozterulet ELSE nebulo.C_KOZTERULETNEV END
						,nebulo.C_KOZTERULETJELLEGE =				CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.KozteruletJelleg ELSE nebulo.C_KOZTERULETJELLEGE END
						,nebulo.C_HAZSZAM =							CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Szam ELSE nebulo.C_HAZSZAM END
						,nebulo.C_EMELET =							CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Emelet ELSE nebulo.C_EMELET END
						,nebulo.C_AJTO =							CASE WHEN @isUpdateLakcim = 1 THEN tempNebulo.Ajto ELSE nebulo.C_AJTO END
						
						--Technikai adatok
						,nebulo.TOROLT =							'F'
						,nebulo.SERIAL =							nebulo.SERIAL + 1
						,nebulo.LASTCHANGED =						@currentDateTime
						,nebulo.MODIFIER =							@pUserId
				  WHEN NOT MATCHED THEN 
					INSERT (
						--Egyszerű import adatok
						 C_TANULOCSALADINEVE
						,C_TANULOUTONEVE
						,C_EDESANYJASZULETESICSALADINEV
						,C_EDESANYJASZULETESIUTONEVE
						,C_SZULETESICSALADINEVE
						,C_SZULETESIUTONEVE
						,C_SZULETESIORSZAG
						,C_SZULETESIHELY
						,C_SZULETESIIDO
						,C_KEPVISELOCIMEAZONOS						
						,C_TARTOZKODASIHELYAZONOS
						,C_ANYANYELVE
						,C_ALLAMPOLGARSAGA
						,C_ELETVITELSZERUOTTLAKASKORZET
						,C_FELADATELLATASIHELYID
						,C_TAGOZAT
						,C_FELVETELSTATUSZA
						,C_BTMLETSZAMSULY
						,C_SNILETSZAMSULY

						--Egyszerű import lakcímmel adatok
						,C_IRANYITOSZAM
						,C_HELYSEGNEV
						,C_KOZTERULETNEV
						,C_KOZTERULETJELLEGE
						,C_HAZSZAM
						,C_EMELET
						,C_AJTO
						
						--Technikai adatok
						,C_INTEZMENYID
						,C_TANEVID
						,TOROLT
						,SERIAL
						,LASTCHANGED
						,CREATED
						,MODIFIER
						,CREATOR)
					VALUES (
						--Egyszerű import adatok
						 tempNebulo.Vezeteknev
						,tempNebulo.Keresztnev
						,tempNebulo.AnyjaVezetekneve
						,tempNebulo.AnyjaKeresztneve
						,tempNebulo.SzuletesiVezeteknev
						,tempNebulo.SzuletesiKeresztnev
						,tempNebulo.SzuletesiOrszag
						,tempNebulo.SzuletesiHely
						,tempNebulo.SzuletesiIdo
						,tempNebulo.TKCimeAzonos
						,tempNebulo.THCimeAzonos
						,tempNebulo.Anyanyelv
						,tempNebulo.Allampolgarsag
						,tempNebulo.EletvitelszeruOttLakasKorzetes
						,tempNebulo.FeladatellatasiHelyId
						,tempNebulo.Tagozat
						,tempNebulo.FelvetelStatusza
						,tempNebulo.BTMLetszamSuly
						,tempNebulo.SNILetszamSuly

						--Egyszerű import lakcímmel adatok
						,tempNebulo.Iranyitoszam
						,tempNebulo.Helyseg
						,tempNebulo.Kozterulet
						,tempNebulo.KozteruletJelleg
						,tempNebulo.Szam
						,tempNebulo.Emelet
						,tempNebulo.Ajto
						
						--Technikai adatok
						,@pIntezmenyId
						,@pTanevId
						,'F'
						,1
						,@currentDateTime
						,@currentDateTime
						,@pUserId
						,@pUserId);
    
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 
			ROLLBACK TRANSACTION;
		THROW
	END CATCH

END
GO

