-- =============================================
-- Author:		Luca
-- Create date: 13/11/2008
-- Description:	Aggiornamento tabella contratti
-- =============================================
CREATE procedure [C6Mart].[DM_PopolaContratti_20161026] 
AS
BEGIN
		DECLARE @ULTIMOPROGRINVIO int--SMALLINT
	DECLARE @ORDINEELAB int--SMALLINT
	DECLARE @RIATTIVAZIONE int--SMALLINT
	DECLARE @inizio DATETIME
	DECLARE @fine DATETIME
	DECLARE @righeUpdate INT
	DECLARE @righeInsert INT
	SET @inizio = GETDATE()
	SET @righeUpdate = 0
	SET @righeInsert = 0
	-- Log esecuzione
	INSERT INTO LOG_ESECUZIONE (Nome, Inizio, Nota)
			VALUES ('DM_PopolaContratti',@inizio,'Elaborazione giornaliera')
	--AGGIORNAMENTO CONTRATTI
	--I RECORD PRESENTI NELLA VARIAZIONE_CONTRSEI POTREBBERO ESSERE 
	--POPOLATI IN ELABORAZIONI DIFFERENTI. VANNO ESEGUITI IN ORDINE
	--DICHIARAZIONE CURSORE PER ESTRARRE LE ELABORAZIONI
	DECLARE ELABORAZIONI CURSOR LOCAL FORWARD_ONLY 
	FOR
	SELECT ULTIMO_PROGRESSIVO_INVIO, ORDINE_DI_ELABORAZIONE_RIGA, RIATTIVAZIONE
	FROM C6STAGING.VARIAZIONE_CONTRSEI
	ORDER BY ULTIMO_PROGRESSIVO_INVIO, ORDINE_DI_ELABORAZIONE_RIGA
	--APERTURA CURSORE
	OPEN ELABORAZIONI
	FETCH NEXT FROM ELABORAZIONI INTO @ULTIMOPROGRINVIO, @ORDINEELAB, @RIATTIVAZIONE
	WHILE @@FETCH_STATUS = 0
	BEGIN
		--AGGIORNAMENTO CONTRATTI ESISTENTI
		UPDATE C6Mart.CONTRATTOSEI
		SET
			 Cod_Fiscale = VARC6.CODICE_FISCALE
			,Data_Sott = VARC6.DATA_SOTTOSCRIZIONE_C6			
			,Cod_Agente = VARC6.PB
			,Data_Perf_Base = VARC6.DATA_PERFEZIONAMENTO_BASE
			,Data_Perf = VARC6.DATA_PERFEZIONAMENTO_C6
			,Fascia_CPP = VARC6.CPP
			,Email = VARC6.EMAIL
			,Indirizzo = VARC6.INDIRIZZO
			,CAP =  VARC6.CAP
			,Citta = VARC6.CITTA
			,Prov = VARC6.PROVINCIA
			,Nazione = VARC6.NAZIONE
			,Presso = VARC6.PRESSO			
			,Freq_Diagnosi = VARC6.FREQUENZA_DIAGNOSI
			,Freq_Monitor = isnull(VARC6.FREQUENZA_MONITORAGGIO,'T')			
			,Data_InizioBase = VARC6.DATA_SOTTOSCRIZIONE_BASE
			,Data_FineBase = VARC6.DATA_CHIUSURA_BASE			
			,Data_FineAvanzato = VARC6.DATA_CHIUSURA_C6
			,ProgressivoInvio = VARC6.ULTIMO_PROGRESSIVO_INVIO
			,GenerazioneReport = VARC6.FLAG_STAMPA_REPORT
			,Rol = isnull(VARC6.Flag_Rol,'N') 			 
			,tip_Contratto = CASE
								WHEN VARC6.tip_Contratto = 'A' THEN 1
								WHEN VARC6.tip_Contratto = 'P' THEN 2
								ELSE 0			                   	
			                 END
			,tip_Riattivazione = @RIATTIVAZIONE
			,numRevoche = CASE 
							WHEN @RIATTIVAZIONE = 0 THEN numRevoche
							ELSE 0 
						 END	
			,data_UltimaRevoca = CASE 
									WHEN @RIATTIVAZIONE = 0 THEN data_UltimaRevoca
									ELSE NULL
								END
			,invioBenvenuto = CASE 
								WHEN @RIATTIVAZIONE = 0 THEN invioBenvenuto
								ELSE 'N'
							 END
			 ,numSolleciti = CASE 								
								WHEN (C6.Rete <> VARC6.Rete_PB OR C6.Cod_Agente <> VARC6.PB) THEN 0
								WHEN @RIATTIVAZIONE = 0 THEN numSolleciti
								ELSE 0
							 END	
			 ,data_UltimoSollecito = CASE 
										WHEN @RIATTIVAZIONE = 0 THEN data_UltimoSollecito
										ELSE NULL 
									 END	
			 ,data_Invio_Monitoraggio_Trimestrale =	CASE 
														WHEN @RIATTIVAZIONE = 0 THEN data_Invio_Monitoraggio_Trimestrale
														ELSE  NULL
													 END
			 ,data_Invio_Diagnosi_Trimestrale =	CASE 
													WHEN @RIATTIVAZIONE = 0 THEN data_Invio_Diagnosi_Trimestrale
													ELSE NULL 
												 END			 				
				FROM C6MART.CONTRATTOSEI C6
					INNER JOIN C6STAGING.VARIAZIONE_CONTRSEI VARC6
					ON  C6.RETE = VARC6.RETE_PB
						AND C6.CODICECONTRATTO = VARC6.CODICE_CONTRATTO
						AND VARC6.ULTIMO_PROGRESSIVO_INVIO = @ULTIMOPROGRINVIO				
						AND VARC6.ORDINE_DI_ELABORAZIONE_RIGA = @ORDINEELAB
				SET @righeUpdate = @righeUpdate + @@ROWCOUNT
		IF  @@ROWCOUNT > 0
			IF @RIATTIVAZIONE = 1 
				BEGIN  
					UPDATE C6MART.Gestione_EMAIL 
						SET TIPO = 'OLD'
						FROM C6MART.Gestione_EMAIL EMAIL
							INNER JOIN C6STAGING.VARIAZIONE_CONTRSEI VARC6
							 ON VARC6.CODICE_FISCALE = EMAIL.COD_FISCALE
							AND VARC6.rete_pb = EMAIL.RETE
							AND VARC6.ULTIMO_PROGRESSIVO_INVIO = @ULTIMOPROGRINVIO				
						    AND VARC6.ORDINE_DI_ELABORAZIONE_RIGA = @ORDINEELAB
						    AND EMAIL.TIPO = 'PERF'
				END  
		ELSE  
			BEGIN
				--INSERIMENTO NUOVI CONTRATTI
				print 'ORDINEELAB=' + convert(varchar,@ORDINEELAB) + ' ULTIMOPROGRINVIO=' + convert(varchar,@ULTIMOPROGRINVIO )
				INSERT INTO C6Mart.CONTRATTOSEI (
					Rete
				   ,Cod_Fiscale
				   ,Piva_Fiduciaria
				   ,Data_Sott
				   ,CodiceContratto
				   ,Cod_Agente
				   ,Data_Perf_Base
				   ,Data_Perf
				   ,Fascia_CPP
				   ,Email
				   ,Indirizzo
				   ,CAP
				   ,Citta
				   ,Prov
				   ,Nazione
				   ,Presso
				   ,Data_Inizio
				   ,Freq_Diagnosi
				   ,Freq_Monitor
				   ,Freq_DiagnosiPrec
				   ,Freq_MonitorPrec
				   ,Data_InizioConsInv
				   ,Data_InizioBase
				   ,Data_FineBase
				   ,Data_InizioAvanzato
				   ,Data_FineAvanzato
				   ,ProgressivoInvio
				   ,GenerazioneReport
				   ,InvioBenvenuto
				   ,DataUltimoInvio
				   ,ClienteMigrato
				   ,RisorseNA
				   ,NumSolleciti
				   ,Data_UltimoSollecito
				   ,Note
				   ,Rol
				   ,tip_Contratto
				   ,tip_Riattivazione)
				SELECT 
					VARC6.RETE_PB,
					VARC6.CODICE_FISCALE,
					MIGR.PIVA,
					VARC6.DATA_SOTTOSCRIZIONE_C6,
					VARC6.CODICE_CONTRATTO,
					VARC6.PB,
					VARC6.DATA_PERFEZIONAMENTO_BASE,
					VARC6.DATA_PERFEZIONAMENTO_C6,
					VARC6.CPP,
					VARC6.EMAIL,
					VARC6.INDIRIZZO,
					VARC6.CAP,
					VARC6.CITTA,
					VARC6.PROVINCIA,
					VARC6.NAZIONE,
					VARC6.PRESSO,
					NULL AS Data_Inizio,
					VARC6.FREQUENZA_DIAGNOSI,
					VARC6.FREQUENZA_MONITORAGGIO,
					NULL AS Freq_DiagnosiPrec,
					NULL AS Freq_MonitorPrec,
					NULL AS Data_InizioConsInv,
					VARC6.DATA_SOTTOSCRIZIONE_BASE,
					VARC6.DATA_CHIUSURA_BASE,
					VARC6.DATA_PERFEZIONAMENTO_C6,
					VARC6.DATA_CHIUSURA_C6,
					VARC6.ULTIMO_PROGRESSIVO_INVIO,
					VARC6.FLAG_STAMPA_REPORT AS GenerazioneReport,
					'N' as InvioBenvenuto,
					NULL as DataUltimoInvio,
					ISNULL(LEFT(MIGR.FLAG_CLIENTE_MIGRATO,1),'N'),
					NULL AS RisorseNA,
					0 AS NumSolleciti, 
					NULL AS Data_UltimoSollecito,
					NULL AS NOTE,
					ISNULL(VARC6.Flag_Rol,'N'),
					CASE
						WHEN VARC6.tip_Contratto = 'A' THEN 1
						WHEN VARC6.tip_Contratto = 'P' THEN 2
						ELSE 0			                   	
	                 END,
	                 VARC6.riattivazione							 
				FROM C6STAGING.VARIAZIONE_CONTRSEI VARC6
					LEFT JOIN C6STAGING.V_CLIENTI_CONTRSEI_CON_MIGRAZ MIGR
						ON MIGR.RETE_PB = VARC6.RETE_PB
						AND MIGR.Codice_Fiscale = VARC6.Codice_Fiscale
						AND MIGR.codice_contratto = VARC6.codice_contratto
					LEFT JOIN C6MART.CONTRATTOSEI C6
						ON VARC6.RETE_PB = C6.RETE
						AND VARC6.Codice_Fiscale = C6.Cod_Fiscale
						AND VARC6.Codice_Contratto = C6.CodiceContratto
					WHERE 1 = 1
						AND VARC6.ULTIMO_PROGRESSIVO_INVIO = @ULTIMOPROGRINVIO				
						AND VARC6.ORDINE_DI_ELABORAZIONE_RIGA = @ORDINEELAB
						AND C6.COD_FISCALE IS NULL
				SET @righeInsert = @righeInsert + @@ROWCOUNT
			END
		FETCH NEXT FROM ELABORAZIONI INTO @ULTIMOPROGRINVIO, @ORDINEELAB, @RIATTIVAZIONE
	END
	SET @fine = GETDATE()
	print convert(varchar,@inizio,113 ) + ' ' + convert(varchar,@fine,113 )
	-- Log esecuzione
	UPDATE LOG_ESECUZIONE
		SET Fine = @fine,Tipo = 'UPDATE',Righe = @righeUpdate
		WHERE Nome = 'DM_PopolaContratti' AND
		      Inizio = (SELECT MAX(Inizio) FROM LOG_ESECUZIONE WHERE Nome = 'DM_PopolaContratti')
	INSERT INTO LOG_ESECUZIONE
		VALUES ('DM_PopolaContratti',@inizio,@fine,'INSERT',@righeInsert,'Elaborazione giornaliera')
	INSERT INTO LOG_ESECUZIONE (Nome, Inizio, Nota)
		VALUES ('DM_PopolaContratti',GETDATE(),'Elaborazione giornaliera')
	--Inserisco il cambio migrazioni anche per i clienti per cui non ho una variazione
	DECLARE @maxInvioSoll AS SMALLINT
	SET @maxInvioSoll = dbo.getParametro('MaxInvioSoll') 
	UPDATE C6Mart.CONTRATTOSEI
	SET ClienteMigrato = ISNULL(LEFT(MIGR.FLAG_CLIENTE_MIGRATO,1),'N'),
		  NumSolleciti =	CASE --V aggiunta condizione profilo attivo per il riazzeramento solleciti
							WHEN (LEFT(MIGR.FLAG_CLIENTE_MIGRATO,1)='S' AND ISNULL(C6.RisorseNA,'N')='N') and isnull(profiloAttivo,1) = 1 AND NumSolleciti <=  @maxInvioSoll THEN 0
							ELSE NumSolleciti
				 		END
	FROM C6MART.CONTRATTOSEI C6
		INNER JOIN C6STAGING.V_CLIENTI_CONTRSEI_CON_MIGRAZ MIGR
			 ON C6.RETE = MIGR.RETE_PB
			AND C6.COD_FISCALE = MIGR.CODICE_FISCALE
	-- Log esecuzione
	UPDATE LOG_ESECUZIONE SET Fine = GETDATE(),Tipo = 'UPDATE',Righe = @@ROWCOUNT
		WHERE Nome = 'DM_PopolaContratti' AND Inizio = (SELECT MAX(Inizio) FROM	LOG_ESECUZIONE WHERE Nome = 'DM_PopolaContratti')
END