-- =============================================
-- AUTHOR:		ALESSANDRO TRINGALI
-- CREATE DATE: 18 SETTEMBRE 2009
-- DESCRIPTION:	
-- =============================================
CREATE procedure [C6Mart].[DM_ALL_PATRIMONIO]
AS
BEGIN
	SET NOCOUNT ON;
	DECLARE @ID_ELAB INT
	SET @ID_ELAB = [C6Mart].GETIDELAB()
	-- LOG ESECUZIONE
	INSERT INTO LOG_ESECUZIONE
		(NOME, INIZIO, NOTA)
	VALUES (
		'DM_ALL_PATRIMONIO',
		GETDATE(),
		'ELABORAZIONE TRIMESTRALE'
	)
	TRUNCATE TABLE [C6Mart].[ALL_PATRIMONIO] 
	INSERT INTO [C6Mart].[ALL_PATRIMONIO]
           (
           [CODICE_FISCALE]
           ,[RETE]
           ,[POSITIONID]
           ,[CATALOGUENAME]
           ,[CATALOGUEID]
           ,[COD_ADEGUATEZZA]
           ,[INTERMEDIARIO]
           ,[PATRIMONIO_INTERMEDIARIO]
           ,[EMITTENTE]
           ,[PATRIMONIO_EMITTENTE]
           ,[COMPLESSITA]
           ,[TIPO_PRODOTTO]
           ,[CONTROVALORE_PRODOTTO]
           ,[AZ_OB]
           ,[PATRIMONIO_AZ_OB_EMIT]
           ,[PATRIM_AZ_OB_EMIT_INTER]   
           ,[PATRIMONIO_COMPLESSIVO] 
           ,[CHIAVE_THR]
           )
SELECT 
       CODICE_FISCALE,
       RETE,
       POSITIONID,
       DATI.CATALOGUENAME,
       CAT.CATALOGUEID,
       CASE
            WHEN ADEGUATEZZA IS NULL
                 THEN CAT.COD_ADEGUATEZZA
            ELSE ADEGUATEZZA
       END AS COD_ADEGUATEZZA,
       INTERMEDIARIO,
       SUM(CONTROVALORE) OVER (PARTITION BY CODICE_FISCALE,RETE,INTERMEDIARIO) AS PATRIMONIO_INTERMEDIARIO,
       EMIT.DESCR AS EMITTENTE,
       CASE
            WHEN EMIT.DESCR IS NULL THEN NULL
            ELSE SUM(CONTROVALORE) OVER (PARTITION BY CODICE_FISCALE,RETE,EMIT.DESCR)
       END AS PATRIMONIO_EMITTENTE,
       CAT.COMPLEX AS COMPLESSITA,
       CAT.TIPOPRODOTTO,
       CONTROVALORE  AS CONTROVALORE_PRODOTTO,
       CASE WHEN CAT.STRTYPE IS NULL
            THEN AZ_OB
            ELSE CAT.STRTYPE
       END AS AZ_OB,
       SUM(CONTROVALORE) OVER (PARTITION BY CODICE_FISCALE,RETE,CASE WHEN CAT.STRTYPE IS NULL THEN AZ_OB ELSE CAT.STRTYPE END,EMIT.DESCR) AS PATRIMONIO_AZ_OB_EMIT,
       SUM(CONTROVALORE) OVER (PARTITION BY CODICE_FISCALE,RETE,INTERMEDIARIO,CASE WHEN CAT.STRTYPE IS NULL THEN AZ_OB ELSE CAT.STRTYPE END,EMIT.DESCR, POSITIONID) AS PATRIM_AZ_OB_EMIT_INTER,
       SUM(CONTROVALORE) OVER (PARTITION BY CODICE_FISCALE,RETE) AS PATRIMONIO_COMPLESSIVO,
       CHIAVE_THR
  FROM (
       SELECT NULL AS AGENTE,
               C.RETE,
               C.CODICE_FISCALE,
               C.CATALOGUENAME,
               C.CONTROVALORE,
               'BF' AS INTERMEDIARIO,
               SUBSTRING(C.STRINGONA_POS, 1, 57) AS CATALOGUEID,
               C.STRINGONA_POS AS POSITIONID,
               NULL AS ADEGUATEZZA,
               'BF' AS PROVENIENZA,
               NULL AZ_OB,
               '' AS CHIAVE_THR
          FROM C6STAGING.ALL_CONSUL_ASUL C
        union all
        SELECT agente,
               substring(agente,1,1) as rete,
               codicefiscale as codice_FISCALE,
               nome_prodotto as cataloguename,
               SUM(controvalore) AS controvalore,
               intermediario,
				case when codiceisin =  '' then '############' else  codiceisin + replicate(' ', 12-len(codiceisin))  end
				 +
				case when codicemaf =  '' then '###############' else  codicemaf + replicate(' ', 15-len(codicemaf))   end
				+
				case when codiceinterno =  '' then '###############' else  codiceinterno + replicate(' ', 15-len(codiceinterno))   end
				+
				case when codicesottoprodotto =  '' then '###############' else  codicesottoprodotto + replicate(' ', 15-len(codicesottoprodotto))   end
				 as catalogueid,
                      null as positionid,
                      codiceadeguatezza as ADEGUATEZZA ,
                      'PPT' as provenienza,
                      --alberatura,
                      case
                          when substring( alberatura,1,13)='Amm.Titoli.Ob'
                               OR substring( alberatura,1,15)='Amm.Strutturati'
                          then 'OB'
                          when substring( alberatura,1,17)='Amm.Titoli.Azioni'
                               OR substring( alberatura,1,18)='Amm.Titoli.Diritti'
                               OR substring( alberatura,1,20)='Amm.Derivati.Warrant'
                               OR substring( alberatura,1,19)='Amm.Derivati.CovWar'
                          then 'AZ'
                          else null
                       end as az_ob, 
                       CHIAVE_THR
          FROM (SELECT cf_e_pb.agente AS agente,
                       cf_e_pb.codice_fiscale AS codicefiscale,
                       nome_istituto AS intermediario,
                       SUM(paTRIMonio) AS controvalore,
                       REPLACE(codice_isin, '$', '') AS codiceisin,
                       REPLACE(codice_adeguatezza, '$', '') AS codiceadeguatezza,
                       REPLACE(codice_maf, '$', '') AS codicemaf,
                       REPLACE(codice_interno, '$', '') AS codiceinterno,
                       REPLACE(codice_sottoprodotto,
                              '$',
                              ''    ) AS codicesottoprodotto,
                       CASE
                         WHEN traduz_alberat.albero_gerarchia_3 =
                              'Conti correnti' AND
                              tipo_prodotto =
                              'Assets.FinancialAssets.CurrentAccount' THEN
                          'Cc'
                         ELSE
                          'xxx'
                       END AS need_si_o_no_cc,
                       provenienza,
                       CASE
                         WHEN provenienza = 'dati NON in catalogo' THEN
                          1
                         ELSE
                          0
                       END AS prodotti_non_in_catalogo,
                       tipo_prodotto,
                       nome_prodotto,
                       alberatura,
                       CHIAVE_THR
                  FROM (
                        -- asset per dati NON in catalogo
                        SELECT aa.paTRIMonio,
                                aa.chiave_cliente,
                                aa.nome_istituto,
                                bb.codice_isin,
                                bb.codice_adeguatezza,
                                bb.codice_maf,
                                NULL AS codice_interno,
                                NULL AS codice_sottoprodotto,
                                aa.alberatura,
                                aa.provenienza,
                                tipo_prodotto,
                                nomeprodotto AS nome_prodotto,
                                CHIAVE_THR
                          FROM (SELECT patr_tp.paTRIMonio_terzi *
                                        acb.bdpercentage AS paTRIMonio,
                                        patr_tp.chiave_per_cliente AS chiave_cliente,
                                        patr_tp.intermediario AS nome_istituto,
                                        ass.assetclassid,
                                        substring(patr_tp.descrizione_alberatura,
                                               1,
                                               45) AS alberatura,
                                        'dati NON in catalogo' AS provenienza,
                                        patr_tp.descrizione_prodotto AS tipo_prodotto,
                                        patr_tp.nomeprodotto,
                                        CHIAVE_THR
                                   FROM C6STAGING.All_patr_terzi patr_tp,
                                        C6STAGING.acbdenoth                    acb,
                                        C6STAGING.assetclass                   ass
                                  WHERE ass.assetclasslev = 2
                                    AND patr_tp.prodotto_in_catalogo IS NULL
                                    AND patr_tp.chiave_fnc IS NOT NULL
                                    AND acb.f_pfinancial_815c0 = patr_tp.chiave_fnc
                                    AND acb.f_oid__passe_cdf1a = ass.oid_
                                    ) aa,
                                C6STAGING.all_asset_class_per_promet bb
                         WHERE bb.codice_asset_class_ingresso = aa.assetclassid
                        UNION ALL
                        -- asset per dati in catalogo che hanno cod_adeguatezza valorizzato
                        SELECT patr_tp.paTRIMonio_terzi AS paTRIMonio,
                               patr_tp.chiave_per_cliente AS chiave_cliente,
                               patr_tp.intermediario AS nome_istituto,
                               cat.cod_isin,
                               cat.cod_adeguatezza,
                               cat.cod_maf,
                               cat.cod_interno,
                               cat.cod_sottoprodotto,
                               substring(cat.type$_bcatal_fc317, 64, 45) AS alberatura,
                               'dati in catalogo che hanno cod_adeguatezza valorizzato' AS provenienza,
                               patr_tp.descrizione_prodotto AS tipo_prodotto,
                               patr_tp.nomeprodotto,
								CHIAVE_THR
                          FROM C6STAGING.all_patr_terzi patr_tp,
                               C6STAGING.catitemref                   cat
                         WHERE patr_tp.chiave_fnc IS NOT NULL
                           AND cat.cod_adeguatezza != '$'
                           AND patr_tp.prodotto_in_catalogo = cat.catalogueid
                        UNION ALL
                        SELECT a.paTRIMonio,
                               a.chiave_cliente,
                               a.nome_istituto,
                               b.codice_isin,
                               b.codice_adeguatezza,
                               b.codice_maf,
                               NULL AS codice_interno,
                               NULL AS codice_sottoprodotto,
                               a.alberatura,
                               a.provenienza,
                               tipo_prodotto,
                               nomeprodotto AS nome_prodotto,
                               CHIAVE_THR
                          FROM (
                                -- ASSET ESISTENTI PER DATI DEL CATALOGO CON ADEGUATEZZA A NULL
                                SELECT PATR_TP.PATRIMONIO_TERZI *
                                        ACB.BDPERCENTAGE AS PATRIMONIO,
                                        PATR_TP.CHIAVE_PER_CLIENTE AS CHIAVE_CLIENTE,
                                        PATR_TP.INTERMEDIARIO AS NOME_ISTITUTO,
                                        LTRIM(ASS.ASSETCLASSID) AS ASSETCLASSID,
                                        ASS.ASSETCLASSLEV,
                                        SUBSTRING(CAT.TYPE$_BCATAL_FC317, 64, 45) AS ALBERATURA,
                                        'DATI IN CATALOGO CHE HANNO COD_ADEGUATEZZA A NULL E ASSET VALORIZZATO' AS PROVENIENZA,
                                        PATR_TP.DESCRIZIONE_PRODOTTO AS TIPO_PRODOTTO,
                                        PATR_TP.NOMEPRODOTTO,
                                        patr_tp.CHIAVE_THR
                                  FROM  C6STAGING.ASSETCLASS                   ASS,
                                        C6STAGING.ALL_PATR_TERZI PATR_TP,
                                        C6STAGING.CATITEMREF                   CAT,
                                        C6STAGING.INSTRBDS                     INS,
                                        C6STAGING.ACBDENTRY                    ACB
                                 WHERE CAT.COD_ADEGUATEZZA = '$'
                                   AND ASS.ASSETCLASSLEV = 2
                                   AND PATR_TP.PRODOTTO_IN_CATALOGO = CAT.CATALOGUEID
                                   AND PATR_TP.CHIAVE_FNC IS NOT NULL
                                   AND CAT.OID$ = INS.F_OID__PCATA_5DDA6
                                   AND INS.OID_ = ACB.F_PINSTRUMEN_FBCDE
                                   AND ACB.F_OID__PASSE_B8A1E = ASS.OID_
                                UNION ALL
                                -- ASSET NON ESISTENTI PER DATI DEL CATALOGO CON ADEGUATEZZA A NULL (SETTATI AD ALTRO PER CONVENZIONE)
                                SELECT PATR_TP.PATRIMONIO_TERZI AS PATRIMONIO,
                                       PATR_TP.CHIAVE_PER_CLIENTE AS CHIAVE_CLIENTE,
                                       PATR_TP.INTERMEDIARIO AS NOME_ISTITUTO,
                                       'AL1' AS ASSETCLASSID,
                                       2,
                                       SUBSTRING(CAT.TYPE$_BCATAL_FC317, 64, 45) AS ALBERATURA,
                                       'DATI IN CATALOGO CHE HANNO COD_ADEGUATEZZA A NULL E ASSET NON VALORIZZATO',
                                       PATR_TP.DESCRIZIONE_PRODOTTO AS TIPO_PRODOTTO,
                                       PATR_TP.NOMEPRODOTTO,
                                       	patr_tp.CHIAVE_THR
                                  FROM C6STAGING.ALL_PATR_TERZI  PATR_TP,
                                       C6STAGING.CATITEMREF                   CAT,
                                       C6STAGING.INSTRBDS                     INS
                                 WHERE CAT.COD_ADEGUATEZZA = '$'
                                   AND PATR_TP.CHIAVE_FNC IS NOT NULL
                                   AND PATR_TP.PRODOTTO_IN_CATALOGO = CAT.CATALOGUEID
                                   AND CAT.OID$ = INS.F_OID__PCATA_5DDA6  --(+)
                                   AND INS.F_OID__PCATA_5DDA6 IS NULL
                                ) A,
                               C6STAGING.ALL_ASSET_CLASS_PER_PROMET B
                         WHERE B.CODICE_ASSET_CLASS_INGRESSO = A.ASSETCLASSID
                         ) patrimonio_PT,
                       C6STAGING.ALL_CF_PB CF_E_PB,
                       C6STAGING.S4_S5_S13_TRAD_UNTIL_LIV3 TRADUZ_ALBERAT
                 WHERE CF_E_PB.oid = patrimonio_PT.CHIAVE_CLIENTE
                   AND TRADUZ_ALBERAT.DESCRIZIONE_ORIGINALE = patrimonio_PT.ALBERATURA
                 GROUP BY CF_E_PB.AGENTE,
                          CF_E_PB.CODICE_FISCALE,
                          NOME_ISTITUTO,
                          REPLACE(codice_isin, '$', ''),
                          REPLACE(codice_adeguatezza,
                                 '$',
                                 ''
                                 ),
                          REPLACE(codice_maf, '$', ''),
                          REPLACE(codice_interno, '$', ''),
                          REPLACE(codice_sottoprodotto,
                                 '$',
                                 ''
                                 ),
                          PROVENIENZA,
                          TRADUZ_ALBERAT.ALBERO_GERARCHIA_3,
                          TIPO_PRODOTTO,
                          NOME_PRODOTTO,
                          ALBERATURA,
                          CHIAVE_THR) TUTTO_PPT
         GROUP BY AGENTE,
                  CODICEFISCALE,
                  INTERMEDIARIO,
                  NOME_PRODOTTO,
                  CODICEISIN,
                  CODICEADEGUATEZZA,
                  CODICEMAF,
                  CODICEINTERNO,
                  CODICESOTTOPRODOTTO,
                  PRODOTTI_NON_IN_CATALOGO,
                  ALBERATURA,
                  CHIAVE_THR
                  ) DATI,
       C6STAGING.CATITEMREF CAT,
       C6STAGING.EMIT
 WHERE CAT.CATALOGUEID = DATI.CATALOGUEID
   AND CAT.CODEMI = EMIT.CODEMI
	-- LOG ESECUZIONE
	UPDATE
		LOG_ESECUZIONE
	SET
		FINE = GETDATE(),
		TIPO = 'INSERT',
		RIGHE = @@ROWCOUNT
	WHERE
		NOME = 'DM_ALL_PATRIMONIO' AND
		INIZIO = (
			SELECT
				MAX(INIZIO)
			FROM
				LOG_ESECUZIONE
			WHERE
				NOME = 'DM_ALL_PATRIMONIO'
		)
END