--[C6MartPeriodico].[PL_D_S180ProdottiComplessitaAlta] 'f', 'ff@9225'
CREATE    procedure [C6MartPeriodico].[Decodifica_Concentrazione_Prodotti_Complessi] --'F','SPNTTR67T20F205D'
	-- Add the parameters for the stored procedure here
	@Rete char(1), 
	@CodiceFiscale varchar(16)
AS
BEGIN
declare @adeguato char(1)
select @adeguato= flgconc from C6MartPeriodico.WSEIAN2 where RETE=@Rete and CODFIS=@CodiceFiscale
if(@adeguato='N')
begin
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	declare @TotalePatrimonio decimal(12,2)
	-- acquisiamo il totale patrimonio del cliente
	SELECT @TotalePatrimonio = ctv
	FROM
		C6MartPeriodico.vPatrimonioBFAggregato
	WHERE
		RETE = @Rete AND
		COD_FISCALE = @CodiceFiscale
--
 SELECT
    1 as Ordine,
    codicecontratto as CodiceContratto,
    nomeprodotto as NomeProdotto,
    controvalore as Controvalore,
	compl_base as Complessita,
    ((controvalore * 100) / @TotalePatrimonio) as Peso,
    @TotalePatrimonio as TotalePatrimonio,
    SUM(controvalore) OVER () as SommaControvalore,
    SUM((controvalore * 100) / @TotalePatrimonio) OVER () as SommaPesi
	into #temp
FROM
    [C6MartPeriodico].[TB_S180ProdottiComplessitaAlta]
WHERE
    rete = @Rete
    AND cod_fiscale LIKE 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN '%%'
        ELSE @CodiceFiscale
        END
    AND codman = 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN SUBSTRING(@CodiceFiscale, 4, LEN(@CodiceFiscale) - 3)
        ELSE ''
        END
    AND Compl_Base > 3
	union all
	SELECT
    2 as Ordine,
    codicecontratto as CodiceContratto,
    nomeprodotto as NomeProdotto,
    controvalore as Controvalore,
	compl_base as Complessita,
    ((controvalore * 100) / @TotalePatrimonio) as Peso,
    @TotalePatrimonio as TotalePatrimonio,
    SUM(controvalore) OVER () as SommaControvalore,
    SUM((controvalore * 100) / @TotalePatrimonio) OVER () as SommaPesi
FROM
    [C6MartPeriodico].[TB_S180ProdottiComplessitaAlta]
WHERE
    rete = @Rete
    AND cod_fiscale LIKE 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN '%%'
        ELSE @CodiceFiscale
        END
    AND codman = 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN SUBSTRING(@CodiceFiscale, 4, LEN(@CodiceFiscale) - 3)
        ELSE ''
        END
    AND Compl_Base > 2
	union all
	SELECT
    3 as Ordine,
    codicecontratto as CodiceContratto,
    nomeprodotto as NomeProdotto,
    controvalore as Controvalore,
	compl_base as Complessita,
    ((controvalore * 100) / @TotalePatrimonio) as Peso,
    @TotalePatrimonio as TotalePatrimonio,
    SUM(controvalore) OVER () as SommaControvalore,
    SUM((controvalore * 100) / @TotalePatrimonio) OVER () as SommaPesi
FROM
    [C6MartPeriodico].[TB_S180ProdottiComplessitaAlta]
WHERE
    rete = @Rete
    AND cod_fiscale LIKE 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN '%%'
        ELSE @CodiceFiscale
        END
    AND codman = 
        CASE WHEN @CodiceFiscale LIKE '%FF@%' THEN SUBSTRING(@CodiceFiscale, 4, LEN(@CodiceFiscale) - 3)
        ELSE ''
        END
    AND Compl_Base > 1
	-- --20180905 Fine modifica
	order by ordine,Compl_Base desc
	delete from #temp where ordine=1 and SommaPesi<20 --pesi definiti da banca se la somma dei pesi di tutti prodotti a complessita alta è <20 
	delete from #temp where ordine=2 and SommaPesi<30 --pesi definiti da banca se la somma dei pesi di tutti prodotti a complessita alta e medio-alta è <30 
	delete from #temp where ordine=3 and SommaPesi<50 --pesi definiti da banca se la somma dei pesi di tutti prodotti a complessita alta e medio-alta e medio-bassa è <50 
DECLARE @countLimMax VARCHAR(50)
SELECT @countLimMax = count(*) FROM #temp 
DECLARE @maxCompl VARCHAR(50)
select @maxCompl = max(compl_base) from [C6MartPeriodico].[TB_S180ProdottiComplessitaAlta] where rete=@rete and Cod_fiscale=@CodiceFiscale
declare @IndPatrimonio decimal(12,2)
	-- acquisiamo il totale patrimonio del cliente
	SELECT @IndPatrimonio = case when ctv>50000 then 2 
								 when ctv>75000 then 3
								 when ctv>150000 then 4
								else 0 end 
	FROM
		C6MartPeriodico.vPatrimonioBFAggregato
	WHERE
		RETE = @Rete AND
		COD_FISCALE = @CodiceFiscale
--print(@countLimMax)
--print(@maxCompl)
--print(@IndPatrimonio)
if (@countLimMax=0 and @maxCompl>@IndPatrimonio)
begin
update C6MartPeriodico.WSEIAN2
set FLGCONC = 'A'
where rete=@Rete
and CODFIS=@CodiceFiscale
--print('Il livello di concentrazione di prodotti complessi nel suo portafoglio è NON ADEGUATO in quanto non coerente rispetto al patrimonio minimo richiesto per la sottoscrizione di tali prodotti.')
end
if (@countLimMax>0 and @maxCompl<=@IndPatrimonio)
begin
update C6MartPeriodico.WSEIAN2
set FLGCONC = 'B'
where rete=@Rete
and CODFIS=@CodiceFiscale
--print('Il livello di concentrazione di prodotti complessi nel suo portafoglio è NON ADEGUATO in quanto superiore ai limiti massimi stabiliti dalla Banca.')
end
if (@countLimMax>0 and @maxCompl>@IndPatrimonio)
begin
update C6MartPeriodico.WSEIAN2
set FLGCONC = 'C'
where rete=@Rete
and CODFIS=@CodiceFiscale
--print('Il livello di concentrazione di prodotti complessi nel suo portafoglio è NON ADEGUATO in quanto superiore ai limiti massimi stabiliti dalla Banca e non coerente rispetto al patrimonio minimo richiesto per la sottoscrizione di tali prodotti.')
end
end
end