CREATE PROCEDURE [C6Mart].[RP_DM_GestioneEmailNA]
AS
BEGIN
DECLARE @NUMGIORNIDALPERF SMALLINT
DECLARE @NUMGIORNIDASOLLECITO SMALLINT
DECLARE @MaxInvioSoll SMALLINT
DECLARE @ID_ELAB INT
SET @NUMGIORNIDALPERF = CAST(dbo.getParametro('NUMGIORNIDALPERF') as smallint)--7
SET @NUMGIORNIDASOLLECITO = CAST(dbo.getParametro('NUMGIORNIDASOLLECITO') AS SMALLINT) --7
SET @MaxInvioSoll = CAST(dbo.getParametro('MaxInvioSoll') AS SMALLINT)--12
SET @ID_ELAB = C6MART.GETIDELAB()
	INSERT INTO LOG_ESECUZIONE(Nome, Inizio, Nota) 
		VALUES ('RP_DM_GestioneEmailNA_AND',GETDATE(),'Elaborazione giornaliera')
BEGIN TRANSACTION
	SELECT DISTINCT ChiaveClientePB 
	   INTO #CaricamentoMassivoC6SC
	FROM [CONSUNI].ConsulenzaUnicaFL.dbo.CaricamentoMassivoC6SC WHERE ESITO = 0 AND CHIUSO = 'N'	   
	SELECT 
		vc.rete,
		vc.cod_fiscale,
		VC.ChiaveClientePb,
		CASE 
			WHEN ISNULL(numSolleciti,0) = 0 THEN '1_SOLL_NOASS'
			WHEN numSolleciti = 1 THEN '2_SOLL_NOASS'
			WHEN numSolleciti = 2 THEN '3_SOLL_NOASS'
			ELSE 'S_SOLL_NOASS'
		END as tipoEmail,
		getDate() as DataGenerazione,
		CASE WHEN  RSES.chiaveclientepb IS NULL THEN 'N' ELSE 'S' END AS ContrRSES,
		@ID_ELAB AS ID_ELAB 
	   INTO #CLIENTINA
    FROM C6Mart.vcontrattisei VC		 
	LEFT JOIN C6MART.CODICI_PROMOTORI_FITTIZI PF
		ON VC.COD_AGENTE BETWEEN PF.CODICEDA AND PF.CODICEA
		AND VC.RETE = PF.RETE
	LEFT JOIN #CaricamentoMassivoC6SC RSES
	    ON  RSES.chiaveclientepb = VC.chiaveclientepb 
	WHERE 1 = 1
		AND VC.numSolleciti < @MaxInvioSoll
		-- modifica del 3/10/2018 per gestire i casi in cui VC.Data_UltimoSollecito = 0 e che manda in errore
		--   la sp (Error: Implicit conversion from data type datetime to smallint is not allowed. Use the CONVERT function to run this query) 
				--AND ((ISNULL(VC.numSolleciti,0) = 0 AND DATEDIFF(DAY,VC.Data_Perf,GETDATE()) >= @NUMGIORNIDALPERF)
				--		 OR
				--	 (DATEDIFF(DAY,isnull(VC.Data_UltimoSollecito,GETDATE()),GETDATE()) >= @NUMGIORNIDASOLLECITO))
				AND ((ISNULL(VC.numSolleciti,0) = 0 AND DATEDIFF(DAY,VC.Data_Perf,GETDATE()) >= @NUMGIORNIDALPERF)
				 OR
			 (DATEDIFF(DAY,isnull( 
						 case when  isdate(VC.Data_UltimoSollecito) = 1
						 then VC.Data_UltimoSollecito
						 else
						 GETDATE()
						 end
						 ,GETDATE()),GETDATE()) >= @NUMGIORNIDASOLLECITO))
			--fine  modifica del 3/10/2018
		-- modifica del 3/10/2018 per gestire i valori 'date' del campo e che mandano in errore di conversione la sp
				--AND VC.InvioBenvenuto = 'N'	 	
			AND cast(VC.InvioBenvenuto as varchar) = 'N'
		-- fine modifica del 3/10/2018
		AND VC.clienteMigrato = 'S' 
		AND VC.risorseNA = 'S'
		AND VC.Data_FineAvanzato > getDate()		 
		AND PF.RETE IS NULL
		--AND VC.COD_FISCALE + VC.RETE IN (SELECT COD_FISCALE+RETE FROM C6MART.TestEmailAnd)
	INSERT INTO C6Mart.GESTIONE_EMAIL (Rete,Cod_Fiscale,Tipo,Data_Generazione,ID_ELAB)
	SELECT 
		rete,
		cod_fiscale,
		tipoEmail,
		DataGenerazione,
		@ID_ELAB AS ID_ELAB
	FROM #CLIENTINA  
	WHERE ContrRSES = 'S'
	UPDATE c6mart.CONTRATTOSEI_METADATI	
	SET  numSolleciti = isnull(numSolleciti,0) + 1, Data_UltimoSollecito = getDate()
	where chiaveclientepb in (
	select chiaveclientepb FROM #CLIENTINA 
	WHERE ContrRSES = 'S')
     INSERT INTO C6Mart.GESTIONE_EMAIL (Rete,Cod_Fiscale,Tipo,Data_Generazione,ID_ELAB)
	SELECT  
		email.rete,
		email.cod_fiscale,
		'REVOCA_NOASS' as tipoEmail,
		getDate() as DataGenerazione,
		@ID_ELAB AS ID_ELAB  
	FROM C6Mart.vcontratti VC
		INNER JOIN [C6Mart].[CONTRATTOSEI_METADATI] MD
			ON MD.chiaveclientepb = VC.chiaveclientepb
	INNER JOIN c6mart.gestione_Email EMAIL
		ON VC.RETE = EMAIL.RETE
		AND VC.COD_FISCALE = EMAIL.COD_FISCALE
	LEFT JOIN C6MART.CODICI_PROMOTORI_FITTIZI PF
		ON VC.COD_AGENTE BETWEEN PF.CODICEDA AND PF.CODICEA
		AND VC.RETE = PF.RETE
	WHERE 1 = 1
		AND EMAIL.Tipo IN ('S_SOLL_NOASS','REVOCA_NOASS')	
		AND (
				(MD.numRevoche> 0) -- SONO NEL CASO DI REVOCA SUCCESSIVA BRAVO VALERIO
				OR 
				(MD.numSolleciti = @MaxInvioSoll and MD.risorseNA = 'S')-- SONO NEL CASO DI PRIMA REVOCA
			)
		AND VC.Data_FineAvanzato > getDate()		 
		AND (DATEDIFF(DAY,isnull(MD.Data_UltimaRevoca,MD.Data_UltimoSollecito),GETDATE()) >= @NUMGIORNIDASOLLECITO)
		AND PF.RETE IS NULL
		--AND VC.COD_FISCALE + VC.RETE IN (SELECT COD_FISCALE+RETE FROM C6MART.TestEmailAnd)
	GROUP BY email.rete, email.cod_fiscale
	UPDATE c6mart.[CONTRATTOSEI_METADATI] SET numRevoche = isnull(numRevoche,0) + 1, data_UltimaRevoca = getDate()
	FROM C6Mart.vcontratti VC
		INNER JOIN [C6Mart].[CONTRATTOSEI_METADATI] MD
			ON MD.chiaveclientepb = VC.chiaveclientepb
	INNER JOIN c6mart.gestione_Email EMAIL
		ON VC.RETE = EMAIL.RETE
		AND VC.COD_FISCALE = EMAIL.COD_FISCALE
	LEFT JOIN C6MART.CODICI_PROMOTORI_FITTIZI PF
		ON VC.COD_AGENTE BETWEEN PF.CODICEDA AND PF.CODICEA
		AND VC.RETE = PF.RETE
	WHERE 1 = 1
		AND EMAIL.Tipo IN ('S_SOLL_NOASS','REVOCA_NOASS')	
		AND (
				(MD.numRevoche> 0) -- SONO NEL CASO DI REVOCA SUCCESSIVA BRAVO VALERIO
				OR 
				(MD.numSolleciti = @MaxInvioSoll and MD.risorseNA = 'S')-- SONO NEL CASO DI PRIMA REVOCA
			)
		AND VC.Data_FineAvanzato > getDate()
		AND (DATEDIFF(DAY,isnull(MD.Data_UltimaRevoca,MD.Data_UltimoSollecito),GETDATE()) >= @NUMGIORNIDASOLLECITO)
		AND PF.RETE IS NULL
		--AND VC.COD_FISCALE + VC.RETE IN (SELECT COD_FISCALE+RETE FROM C6MART.TestEmailAnd)
	update C6Mart.GESTIONE_EMAIL
	set Inviata = 'S', Data_Invio = getdate()
	where Cod_Fiscale = 'CRCTMS62A05H501D'
	-- Log esecuzione
	UPDATE
		LOG_ESECUZIONE
	SET
		Fine = GETDATE(),
		Tipo = 'UPDATE',
		Righe = @@ROWCOUNT
	WHERE
		Nome = 'RP_DM_GestioneEmailNA_AND' AND
		Inizio = (
			SELECT
				MAX(Inizio)
			FROM
				LOG_ESECUZIONE
			WHERE
				Nome = 'RP_DM_GestioneEmailNA_AND'
		)
COMMIT
END