CREATE   procedure [C6Mart].[RP_DM_Benvenuto_Scarti] 
AS
BEGIN
	SET NOCOUNT ON;
-- Truncate table
TRUNCATE TABLE C6Mart.tbNotAllocatedResources;
--truncate table C6MartPeriodico.Benvenuto_Scarti;
-- Insert into tbNotAllocatedResources
INSERT INTO C6Mart.tbNotAllocatedResources (COD_FISCALE, RETE, CTV)
SELECT 
    PIRAMIDE_MOD.COD_FISCALE, 
    PIRAMIDE_MOD.RETE, 
    SUM(ISNULL(CTV, 0)) as CTV
FROM 
    C6MART.PIRAMIDE_MOD PIRAMIDE_MOD
    INNER JOIN C6MART.PATRIMONIO_BF PIRAMIDE_VERT ON 
        PIRAMIDE_VERT.COD_FISCALE = PIRAMIDE_MOD.COD_FISCALE
        AND PIRAMIDE_VERT.RETE = PIRAMIDE_MOD.RETE
        AND CASE 
            WHEN PIRAMIDE_VERT.ID_AREA = 'SELF' THEN LEFT(PIRAMIDE_VERT.ID_AREA, 4) 
            ELSE LEFT(PIRAMIDE_VERT.ID_AREA, 3) 
        END = PIRAMIDE_MOD.ID_AREA
WHERE 
    PIRAMIDE_MOD.ID_AREA = 'Na' 
    AND ISNULL(CTV, 0) > 0
GROUP BY 
    PIRAMIDE_MOD.COD_FISCALE, PIRAMIDE_MOD.RETE;
-- Declare variables
DECLARE @sogliaRfa AS DECIMAL(18, 0);
DECLARE @sogliaRfaDB AS DECIMAL(18, 0);
DECLARE @data_perf AS DATETIME;
DECLARE @nomeRep AS VARCHAR(32);
-- Set variable values
SET @sogliaRfa = (SELECT valore FROM [CONSUNI].[ConsulenzaUnica].[dbo].[param] WHERE parametro = 'sogliaRFA');
SET @data_perf = '20200401';
SET @sogliaRfaDB = 0;
SET @nomeRep = (SELECT Reportistica FROM [C6Mart].[TB_Selettore_GetDataThreads]);
-- Insert into Benvenuto_Scarti
INSERT INTO C6Mart.Benvenuto_Scarti
-- Clienti Risorse Non Allocate Problema Allineamento Massivo
SELECT  
    contratti.Rete as Rete,
    contratti.Cod_Agente Cod_Agente,
    contratti.Cod_Fiscale Codice_Fiscale,
    contratti.CodiceContratto CodiceContratto,
    CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    'Problema Allineamento Massivo' as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vContrattiPerGenerazioneReport contratti
    LEFT JOIN C6Mart.tbNotAllocatedResources as nar ON 
        contratti.Rete = nar.Rete
        AND contratti.Cod_Fiscale = nar.Cod_Fiscale
    LEFT JOIN C6Mart.ANAG_CLIENTI clienti ON 
        contratti.Rete = clienti.Rete
        AND contratti.Cod_Fiscale = clienti.Cod_Fiscale
    INNER JOIN C6Mart.vPatrimoniobfAggregato_SenzaNobPrez patrimonioBF ON 
        contratti.Rete = patrimonioBF.Rete
        AND contratti.Cod_Fiscale = patrimonioBF.Cod_Fiscale 
    LEFT OUTER JOIN C6Mart.MIFID MIFID ON 
        contratti.Rete = MIFID.Rete
        AND contratti.Cod_Fiscale = MIFID.Cod_Fiscale
WHERE 
    1 = 1
    AND nar.rete IS NOT NULL
UNION ALL
-- Problema DATA QUALITY
SELECT 
    test.rete,
    contratti.Cod_Agente,
    test.COD_FISCALE,
    contratti.CodiceContratto CodiceContratto,
    CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    test.Motivo as Motivazione,
    GETDATE()
FROM 
    c6mart.Test_Quality test
    INNER JOIN C6Mart.RP_vContrattiPerGenerazioneReport contratti ON 
        contratti.Rete = test.Rete
        AND contratti.Cod_Fiscale = test.Cod_Fiscale
UNION ALL
-- Soglia RFA Non Corretta SEI
SELECT  
    contratti.Rete as Rete,
    contratti.Cod_Agente Cod_Agente,
    contratti.Cod_Fiscale Codice_Fiscale,
    contratti.CodiceContratto CodiceContratto,
    CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    'Soglia RFA Non corretta RFA = ' + CAST(patrimonioBF.ctv AS VARCHAR(100)) as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vContrattiPerGenerazioneReport contratti
    LEFT JOIN C6Mart.tbNotAllocatedResources as nar ON 
        contratti.Rete = nar.Rete
        AND contratti.Cod_Fiscale = nar.Cod_Fiscale
    LEFT JOIN C6Mart.ANAG_CLIENTI clienti ON 
        contratti.Rete = clienti.Rete
        AND contratti.Cod_Fiscale = clienti.Cod_Fiscale
    INNER JOIN C6Mart.vPatrimoniobfAggregato_SenzaNobPrez patrimonioBF ON 
        contratti.Rete = patrimonioBF.Rete
        AND contratti.Cod_Fiscale = patrimonioBF.Cod_Fiscale 
    LEFT OUTER JOIN C6Mart.MIFID MIFID ON 
        contratti.Rete = MIFID.Rete
        AND contratti.Cod_Fiscale = MIFID.Cod_Fiscale
WHERE 
    1 = 1
    AND patrimonioBF.ctv < @sogliaRFA  
    AND contratti.tip_contratto <> 3 
	UNION ALL
-- Soglia RFA Non Corretta SEI
SELECT  
    contratti.Rete as Rete,
    contratti.Cod_Agente Cod_Agente,
    contratti.Cod_Fiscale Codice_Fiscale,
    contratti.CodiceContratto CodiceContratto,
    CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    'Soglia RFA Non corretta RFA = ' + CAST(patrimonioBF.ctv AS VARCHAR(100)) as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vContrattiPerGenerazioneReport contratti
    LEFT JOIN C6Mart.tbNotAllocatedResources as nar ON 
        contratti.Rete = nar.Rete
        AND contratti.Cod_Fiscale = nar.Cod_Fiscale
    LEFT JOIN C6Mart.ANAG_CLIENTI clienti ON 
        contratti.Rete = clienti.Rete
        AND contratti.Cod_Fiscale = clienti.Cod_Fiscale
    INNER JOIN C6Mart.vPatrimoniobfAggregato_SenzaNobPrez patrimonioBF ON 
        contratti.Rete = patrimonioBF.Rete
        AND contratti.Cod_Fiscale = patrimonioBF.Cod_Fiscale 
    LEFT OUTER JOIN C6Mart.MIFID MIFID ON 
        contratti.Rete = MIFID.Rete
        AND contratti.Cod_Fiscale = MIFID.Cod_Fiscale
WHERE 
    1 = 1
    AND patrimonioBF.ctv <= @sogliaRFADB  
    AND contratti.tip_contratto = 3 
UNION ALL
-- Lettera di Benvenuto Gia Ricevuta	
--SELECT  
--    C6.Rete,
--    Cod_Agente,
--    C6.Cod_Fiscale,
--    CodiceContratto,
--    CASE WHEN tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
--    'Lettera di Benvenuto già inviata' as Motivazione,
--    GETDATE()
--FROM 
--    C6Mart.RP_vTuttiIContratti AS C6 
--WHERE  
--    1 = 1	
--    AND (InvioBenvenuto <> 'N') 
--UNION ALL
-- Clienti Risorse Non Allocate Problema Allineamento Massivo
SELECT  
    C6.Rete,
    Cod_Agente,
    C6.Cod_Fiscale,
    CodiceContratto,
    CASE WHEN tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    'Risorse non allocate (Problema allineamento Massivo)' as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vTuttiIContratti AS C6 
WHERE  
    1 = 1	
    AND (ISNULL(RisorseNa, 'N') <> 'N') 
UNION ALL 
-- Cliente Revocato
SELECT  
    C6.Rete,
    Cod_Agente,
    C6.Cod_Fiscale,
    CodiceContratto,
    CASE WHEN tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END as Tipologia_Cliente,
    'Cliente Revocato' as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vTuttiIContratti AS C6 
WHERE  
    1 = 1	
    AND (ISNULL(NumRevoche, 0) <> 0)
UNION ALL
-- Numero giorni perfezionamento non corretto
SELECT  
    C6.Rete,
    Cod_Agente,
    C6.Cod_Fiscale,
    CodiceContratto,
    CASE WHEN tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END AS Tipologia_Cliente,
    'Data Di Perfezionamento: ' + ISNULL(CAST(Data_Perf AS VARCHAR(10)), '') + '|' +
    ' Giorni che devono passare dal Perfezionamento: ' + CAST(dbo.getParametro('NUMGIORNIDALPERF_REP') AS VARCHAR(10)) + '|' +
    ' Data Prevista di Generazione Report: ' + ISNULL(CAST(dbo.getferiale(DATEADD(d, CAST(dbo.getParametro('NUMGIORNIDALPERF_REP') AS INT), CAST(Data_Perf AS DATE))) AS VARCHAR(10)), '') AS Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vTuttiIContratti AS C6
WHERE 
    1 = 1
    AND (DATEDIFF(d, Data_Perf, GETDATE()) < CAST(dbo.getParametro('NUMGIORNIDALPERF_REP') AS INT))
UNION ALL
-- Profilo EC Minimo
SELECT  
    C6.Rete,
    Cod_Agente,
    C6.Cod_Fiscale,
    CodiceContratto,
    CASE WHEN tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END AS Tipologia_Cliente,
    'Profilo EC Minimo' as Motivazione,
    GETDATE()
FROM 
    C6Mart.RP_vTuttiIContratti AS C6
WHERE 
    1 = 1
    AND Profilo_EC <> 1
UNION ALL
-- Spiegazione visto che questa SP parte alla fine della generazione del report se nella [C6Mart].[GESTIONE_SELECT_PDF_GETDATATHREADS_NA_A] (stessa query di sotto ma con meno info) sono presenti dei record significa che c'è qualche errore nella generazione del PDF 
 SELECT distinct 
		 contratti.Rete
		,contratti.Cod_Agente Agente
		,contratti.Cod_Fiscale CodiceFiscale
		,contratti.CodiceContratto CodiceContratto
		,CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END AS Tipologia_Cliente
		,'Errore generazione PDF (Controlla Global Error e LogN)' as Motivazione
		,getdate() as Data_Inserimento
	from C6Mart.RP_vContrattiPerGenerazioneReport contratti
	left join  C6Mart.tbNotAllocatedResources as nar	--pk
		on contratti.Rete = nar.Rete				--pk
		and contratti.Cod_Fiscale = nar.Cod_Fiscale	--pk
	INNER join C6Mart.vPatrimoniobfAggregato_SenzaNobPrez patrimonioBF
		on contratti.Rete = patrimonioBF.Rete
		and contratti.Cod_Fiscale = patrimonioBF.Cod_Fiscale 
    where 1=1
	and nar.rete is null --pk
	and ((patrimonioBF.ctv >= @sogliaRFA or contratti.data_perf < @data_perf) or (patrimonioBF.ctv >= 25000 and contratti.data_inizioavanzato < '20240412')) --rimossa per Fideuram Direct / Direct Banker
	and contratti.tip_contratto <> 3 
UNION ALL
 SELECT distinct 
 	 contratti.Rete
		,contratti.Cod_Agente Agente
		,contratti.Cod_Fiscale CodiceFiscale
		,contratti.CodiceContratto CodiceContratto
		,CASE WHEN contratti.tip_contratto = '3' THEN 'DIRECT' ELSE 'SEI' END AS Tipologia_Cliente
		,'Errore generazione PDF (Controlla Global Error e LogN)'
		,getdate() as Data_Inserimento
	from C6Mart.RP_vContrattiPerGenerazioneReport contratti
	left join  C6Mart.tbNotAllocatedResources as nar	--pk
		on contratti.Rete = nar.Rete				--pk
		and contratti.Cod_Fiscale = nar.Cod_Fiscale	--pk
	INNER join C6Mart.vPatrimoniobfAggregato_SenzaNobPrez patrimonioBF
		on contratti.Rete = patrimonioBF.Rete
		and contratti.Cod_Fiscale = patrimonioBF.Cod_Fiscale 
	left join c6mart.vcontrattic6 vcontr
	on vcontr.codicecontratto  =  contratti.codicecontratto
    where 1=1
	and nar.rete is null --pk
	and contratti.Cod_Fiscale +  contratti.Rete NOT IN (SELECT COD_FISCALE + RETE FROM C6MART.TEST_QUALITY)
         and   contratti.tip_contratto = 3
            AND patrimonioBF.ctv >= @sogliaRFADB
         and vcontr.data_perf < @data_perf
	and contratti.Cod_Fiscale in (select CODICE_FISCALE from c6staging.VAR_ADEGUATEZZA_INDICATORI)
-- Select all from Benvenuto_Scarti
--SELECT * FROM C6MartPeriodico.Benvenuto_Scarti;
END