﻿-- =============================================
-- Author:		Caruso Fabrizio
-- Create date: 17/09/2014
-- Description:	
-- Individuazione dei Clienti che presentano una o più posizioni duplicate 
-- nel proprio patrimonio finanziario 
-- Impostazione Codice TIPO CONTROLLO per il controllo specifico 
-- ( per riferimenti al tipo controllo verificare tabella "tb_tipocontrollo" )
-- =============================================
--  ATTENZIONE !!! 
--  La SP che carica la Patrimonio BF effettua un controllo dopo una prima elaborazione e scarta 
--  i record "duplicati". Riporto la query di INPUT per poter effetturare il test e lo scarto
CREATE procedure [C6MartPeriodico].[SP_DQ_PosizioniDuplicate]
@idFaseElaborazione int
AS
BEGIN
Declare @idTipoControllo int
set @idTipoControllo=4		
-- Selezione in Tabella Temporanea Verifica_CAMPIONE dei record "doppi"
SELECT -- PER DIVERSI DA CC ************************
		SPB.RETE AS RETE,
		SPB.CODFIS AS COD_FISCALE,
		SPB.POSITIONID AS POSITIONID,
		SUBSTRING(SPB.POSITIONID,1,57) AS COD_PRODOTTO, 
		SPB.CODCONF AS ID_CONTRATTO,
        CASE WHEN ISDATE(SPB.DTSOTTOS) = 0 THEN NULL
				ELSE CAST(CAST(SPB.DTSOTTOS AS VARCHAR(8)) AS DATETIME)
		END AS DATA_SOTTOSCRIZIONE,
        null AS COD_STATO,
		SPB.NUMPOL AS NUM_POLIZZA,
		SPB.MAF AS COD_MAF,
		SPB.CODINT AS COD_INTERNO,
		SPB.SUBPROD AS COD_SOTTOPRODOTTO,
		SPB.TIPPROD AS TIPO_PRODOTTO,
		CASE
			WHEN CON.area = 'Inv' AND CON.tipoProgetto = 0 THEN 'Prodotti non associati a progetti'
			ELSE LTRIM(RTRIM(CON.nomeProgetto))
		END AS NOME_PROGETTO,
        case when isnull(CON.tipoProgetto, '') = '' then 'Default' 
             when CON.tipoProgetto = 0 then 'Default' 
             else 'ProgettoInvestimento' end as TIPO_PROGETTO,
		CON.area AS ID_AREA,
        CASE
			WHEN ISDATE(SPB.DTRIFE) = 0 THEN NULL
			ELSE CAST(CAST(SPB.DTRIFE AS VARCHAR(8)) AS DATETIME)
		END AS DATA_OPERAZIONE,
		NULL AS DATA_VALUTA, 
		NULL AS DATA_REGOLAMENTO,
		SPB.QUOTE AS QUANTITA,
		NULL AS PREZZO,
		SPB.CTV AS CTV,
		SPB.VALORE AS CTV_NOMINALE,		
		CASE 
			WHEN (SPB.TIPPROD = 'GE' 
				OR SPB.TIPPROD = 'GES')
				AND SPB.DTSOTTOS < 20070101
				THEN NULL 
			WHEN SPB.TIPPROD IN ( 'ASVI','ASU1')
				THEN NULL
			WHEN SPB.TIPPROD = 'ASUL' AND SPB.CODINT NOT IN ('18','19','35','PR','PX')
				THEN NULL
		    WHEN SPB.CVN = 0
		        THEN NULL		 
			ELSE SPB.CVN 
		END AS VERSATO_NETTO,
		SPB.PARTVIA AS PARTVIA_DISINV,
        CASE WHEN ISDATE(SPB.PARTVIAAL) = 0 THEN NULL
          ELSE CAST(CAST(SPB.PARTVIAAL AS VARCHAR(8)) AS DATETIME) END AS DATA_PARTVIA_DISINV,
		NULL AS PARTVIA_INV,	 
		CASE 
			WHEN (SPB.TIPPROD = 'GE' 
				OR SPB.TIPPROD = 'GES')
				AND SPB.DTSOTTOS < 20070101
				THEN NULL 
			WHEN SPB.TIPPROD IN ( 'ASVI','ASU1')
				THEN NULL
			WHEN SPB.TIPPROD = 'ASUL' AND SPB.CODINT NOT IN ('18','19','35','PR','PX')
				THEN NULL
			ELSE SPB.RENDINIZ
		END AS REND_SOTTOSCRIZIONE,
		null AS REND_TRIMESTRE,	
		CASE 
			WHEN (SPB.TIPPROD = 'GE' 
				OR SPB.TIPPROD = 'GES')
				AND SPB.DTSOTTOS < 20070101
				THEN NULL 
			WHEN SPB.TIPPROD IN ( 'ASVI','ASU1')
				THEN NULL
			WHEN SPB.TIPPROD = 'ASUL' AND SPB.CODINT NOT IN ('18','19','35','PR','PX')
				THEN NULL
			ELSE SPB.RENDANNO
		END AS REND_ANNO,
		CON.StrType,
        CON.Complessita AS COMPLEX,
        CON.DescrizioneEmittente AS EMITTENTE,
		SPB.ISIN,
		CON.chiaveClientePB,
--nuovo 
        0 AS REND_NON_RAPPR,
        CON.ChiaveProgetto AS ORDINAMENTO_PROGETTO,
        CASE WHEN CON.orizzonteTemporale = 0 THEN NULL ELSE CON.orizzonteTemporale END AS ORIZZ_TEMP_NUM,
        CASE WHEN ISNULL(ORIZZONTETEMPORALE, 0) = 0 THEN NULL ELSE  LTRIM(RTRIM(ORIZZONTETEMPORALE)) + ' anni' END AS ORIZZONTETEMPORALE,
        CON.CHIAVEPROGETTO AS CHIAVEPROGETTO 	
-- fine nuovo
--***************************************
	INTO #Verifica_CAMPIONE
--***************************************	
	FROM C6StagingPeriodico.SPB_CONTR_SINTESI SPB
	INNER JOIN C6StagingPeriodico.RP_Consulenza CON
		ON CON.rete = SPB.RETE
		AND CON.cod_fiscale = SPB.CODFIS
		AND CON.Position_id = SPB.positionid	 
	LEFT JOIN C6StagingPeriodico.RP_ChiaviMonitoraggio CM
		ON CON.chiaveprogetto = CM.chiaveProgetto
       AND CM.stato = 1
	WHERE SPB.POSITIONID IS NOT NULL
          and CON.area <> 'CC' and SPB.TIPPROD <> 'CC'
    --***INIZIO INTERVENTI OMNIA*** 
          and SPB.Isin <> 'EURO00000009'
          and CON.area <> 'SELF'
    --FINE INTERVENTI OMNIA***
    UNION ALL
    SELECT -- *** PER UGUALI DA CC ************************      
		SPB.RETE AS RETE,
		SPB.CODFIS AS COD_FISCALE,
		SPB.POSITIONID AS POSITIONID,
		SUBSTRING(SPB.POSITIONID,1,57) AS COD_PRODOTTO, 
		SPB.CODCONF AS ID_CONTRATTO,
        CASE WHEN ISDATE(SPB.DTSOTTOS) = 0 THEN NULL
				ELSE CAST(CAST(SPB.DTSOTTOS AS VARCHAR(8)) AS DATETIME)
		END AS DATA_SOTTOSCRIZIONE,
		NULL AS COD_STATO,
		SPB.NUMPOL AS NUM_POLIZZA,
		SPB.MAF AS COD_MAF,
		SPB.CODINT AS COD_INTERNO,
		SPB.SUBPROD AS COD_SOTTOPRODOTTO,
		SPB.TIPPROD AS TIPO_PRODOTTO,
		CON.NOMEPROGETTO AS NOME_PROGETTO,
                case when isnull(CON.tipoProgetto, '') = '' then 'Default' 
             when CON.tipoProgetto = 0 then 'Default' 
             else 'ProgettoInvestimento' end as TIPO_PROGETTO,
		CON.AREA AS ID_AREA,
		CASE WHEN ISDATE(SPB.DTRIFE) = 0 THEN NULL
         ELSE CAST(CAST(SPB.DTRIFE AS VARCHAR(8)) AS DATETIME) END AS DATA_OPERAZIONE,
		NULL AS DATA_VALUTA, -- 105 PER FORMAT DD/MM/YYYY
		NULL AS DATA_REGOLAMENTO,
		SPB.QUOTE AS QUANTITA,
		NULL AS PREZZO,
		SPB.CTV AS CTV,
		SPB.VALORE AS CTV_NOMINALE,
		CASE 
		    WHEN SPB.CVN = 0
		        THEN NULL		 
			ELSE SPB.CVN 
		END AS VERSATO_NETTO,
		SPB.PARTVIA AS PARTVIA_DISINV,
		CASE WHEN ISDATE(SPB.PARTVIAAL) = 0 THEN NULL
         ELSE CAST(CAST(SPB.PARTVIAAL AS VARCHAR(8)) AS DATETIME) END  AS DATA_PARTVIA_DISINV,			
		NULL AS PARTVIA_INV,  
		SPB.RENDINIZ AS REND_SOTTOSCRIZIONE,
		NULL AS REND_TRIMESTRE,
		SPB.RENDANNO AS REND_ANNO,
        CON.StrType,
        CON.Complessita AS COMPLEX,
        CON.DescrizioneEmittente as EMITTENTE,
		SPB.ISIN,
		CON.chiaveClientePB,
--nuovo 
        0 AS REND_NON_RAPPR,
        CON.ChiaveProgetto AS ORDINAMENTO_PROGETTO,
        CASE WHEN CON.orizzonteTemporale = 0 THEN NULL ELSE CON.orizzonteTemporale END AS ORIZZ_TEMP_NUM,
        CASE WHEN ISNULL(ORIZZONTETEMPORALE, 0) = 0 THEN NULL ELSE  LTRIM(RTRIM(ORIZZONTETEMPORALE)) + ' anni' END AS ORIZZONTETEMPORALE,
        CON.CHIAVEPROGETTO AS CHIAVEPROGETTO 	
-- fine nuovo	
	FROM C6STAGINGPERIODICO.SPB_CONTR_SINTESI SPB
	INNER JOIN C6StagingPERIODICO.RP_Consulenza CON
		ON CON.rete = SPB.RETE
		AND CON.cod_fiscale = SPB.CODFIS
		AND CON.Position_id = SPB.positionid		 
    INNER JOIN C6STAGINGPERIODICO.RP_CATALOGOPRODOTTI KAT
		ON SUBSTRING(SPB.POSITIONID,1,57)=KAT.CATALOGUEID
    LEFT JOIN C6StagingPeriodico.RP_ChiaviMonitoraggio CM
		ON CON.chiaveprogetto = CM.chiaveProgetto
        AND CM.stato = 1
    LEFT OUTER JOIN C6STAGINGPERIODICO.RP_AnEmittente MIT
        ON  MIT.Emittente =KAT.EMITTENTE
	WHERE SPB.TIPPROD = 'CC'
	--***INIZIO INTERVENTI OMNIA*** 
          or SPB.Isin = 'EURO00000009'
SELECT RETE, COD_FISCALE, POSITIONID,@idTipoControllo idtipocontrollo
into #TbErrori
FROM #Verifica_CAMPIONE
GROUP BY RETE, COD_FISCALE, POSITIONID
HAVING COUNT(*) > 1
declare @idElab  int
select @idElab=max(id_elab) from  c6martperiodico.elaborazioni
--select * from c6martperiodico.tb_tipocontrollo
Insert into C6MartPeriodico.TB_SegnalazioniDataQuality
( 
idTipoControllo,
rete,
codiceFiscale,
descSegnalazione,
idElaborazione,
richiesta,
idFaseElaborazione)
select tbErr.idTipoControllo,rete,COD_FISCALE,DescSegnalazione,@idelab,'',@idFaseElaborazione
from #TbErrori tbErr
inner join c6martperiodico.tb_tipocontrollo Tipo
on tbErr.idtipocontrollo = tipo.idTipoControllo
end