-- Schema: C6Mart
-- Stored Procedure: RP_DM_GestioneEmailNA


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) 
