﻿CREATE procedure [dbo].[test_S80All_fc]
AS
BEGIN
/*
  Purpose: Calculate the total quantity and sales of the product in
           product wise.
  Input  : No input specified. It will calculate for all the products
           in Product Master table.
  Output : ProductID,ProductName,Total Quantity and Grand Total of
           sale.
  Method : The report generated without using the Cursor
-----------------------------------------------------------------------
*********************  Modification History   *************************
-----------------------------------------------------------------------
S.No             Name            Date                   Version
-----------------------------------------------------------------------
1.        Erode Senthilkumar   Sep 01, 2009              1.0
-----------------------------------------------------------------------
*/
    SET NOCOUNT ON
    SET XACT_ABORT ON
    DECLARE @ProductID INT
    DECLARE @ProductName VARCHAR(100)
    DECLARE @TotalQty INT
    DECLARE @Total MONEY
    DECLARE @Index INT
    DECLARE @RecordCnt INT
    DECLARE @tab TABLE(
     id INT IDENTITY(1,1)
    ,rete char(1)
    ,codicefiscale varchar(16)
    ,totCC int 
    ,totNoCC int
    )
    DECLARE @testTab TABLE
    (
        id INT IDENTITY(1,1)
       ,rete char(1)
       ,codicefiscale VARCHAR(100)
       ,CountCC INT
       ,CountNoCC int
    )
   DECLARE @Rete char(1)
	DECLARE @CodiceFiscale varchar(16)
	-- Recupero data congelamento SEI
	DECLARE @MONIT_INIT INT
	DECLARE @DataCongelamento DATETIME
    DECLARE @MONIT_ATTIV INT
	DECLARE @AGGR INT
	declare @contaCC as int
	declare @contapos as int
	SET @DataCongelamento = C6MartPeriodico.getDataCongelamento()
    SET  @MONIT_ATTIV=0
	SET	 @MONIT_INIT = 0
    SELECT @Index = 1
    INSERT INTO @tab(rete,codicefiscale,totCC,totNoCC)
    select rete,cod_fiscale
	,sum ( case when tipo_prodotto ='CC' then tot else 0 end ) as cc 
	,sum ( case when tipo_prodotto <>'CC' then tot else 0 end ) as nocc 
	from 
	( select rete,cod_fiscale,tipo_prodotto,count(*) tot
	  from c6martperiodico.patrimonio_Bf
	  --where cod_fiscale = @codiceFiscale and rete = @rete
	  group by rete,cod_fiscale,tipo_prodotto
	) as gr
	group by rete,cod_fiscale
    SELECT @RecordCnt = COUNT(id) FROM @tab
    WHILE (@Index <= @RecordCnt)
    BEGIN           
            SELECT  @rete=rete
				    ,@codicefiscale=codicefiscale
				    ,@contacc=totCC
				    ,@contapos=totNoCC 
		    FROM @tab WHERE id = @Index
    SELECT @MONIT_INIT = COUNT(*)
	FROM
	C6MARTPERIODICO.MONITORAGGIO_INIZIALE
	WHERE 
    		RETE = @Rete AND
		    COD_FISCALE = @CodiceFiscale
    SELECT @MONIT_ATTIV=COUNT(*)
    FROM 
    C6MARTPERIODICO.MONITORAGGIO_ATTUALE
    WHERE 
    		RETE = @Rete AND
		    COD_FISCALE = @CodiceFiscale
	SELECT @AGGR=COUNT(*)
    FROM 
    C6MARTPERIODICO.RISCHIO_AGGREGATO
    WHERE
			RETE = @Rete AND
		    COD_FISCALE = @CodiceFiscale      
        IF (@MONIT_ATTIV > 0 AND @AGGR > 0 AND @MONIT_INIT > 0)
    BEGIN
	-- Attivazione monitoraggio
-- nuova versione da testare
insert into c6martperiodico.tb_S80BisEvoluzioneRischio	 
	SELECT
	@rete,
	@codicefiscale,
		1 AS Fase,
		INI.DATA_FOTO AS DataFase,
		INI.VAR_MAX_PROFILO AS VarMassimoProfiloFinanziario,
		--V
		CASE
			WHEN INI.VAR_COMPLESSIVO IS NULL THEN INI.VAR_COMPLESSIVO
			ELSE ROUND(INI.VAR_COMPLESSIVO,2)
		END AS VarComplessivo,
		INI.VAR_COPERTURA AS Copertura,
        INI.RISKCLASS,
        INI.RISKCLASSMAX,
		case 
			when INI.RISKCLASS is null  then 'n.d.'
			when INI.RISKCLASS = 0 then 'n.a.'	
			else null
		end as RiskClassString,
		case 
			when INI.RISKCLASSMAX is null then 'n.d.'
			when INI.RISKCLASSMAX = 0 then 'n.a.'
			else null
		end as RiskClassMaxString
	FROM
		C6MartPeriodico.MONITORAGGIO_INIZIALE INI
        LEFT OUTER  join
        C6MartPeriodico.MONITORAGGIO_REPORT rep
        on 
        REP.RETE=INI.RETE
        AND 
        REP.COD_FISCALE=INI.COD_FISCALE
	WHERE
		INI.RETE = @Rete AND
		INI.COD_FISCALE = @CodiceFiscale
--	SELECT
--		1 AS Fase,
--		INI.DATA_FOTO AS DataFase,
--		INI.VAR_MAX_PROFILO AS VarMassimoProfiloFinanziario,
--		--V
--		CASE
--			WHEN INI.VAR_COMPLESSIVO IS NULL THEN INI.VAR_COMPLESSIVO
--			ELSE ROUND(INI.VAR_COMPLESSIVO,2)
--		END AS VarComplessivo,
--		INI.VAR_COPERTURA AS Copertura
--	FROM
--		C6MartPeriodico.MONITORAGGIO_INIZIALE INI
--
--	WHERE
--		INI.RETE = @Rete AND
--		INI.COD_FISCALE = @CodiceFiscale
	UNION ALL
	-- Precedente invio report
	SELECT
	@rete,
	@codicefiscale,
		2 AS Fase,
		rep.DATA_INVIO AS DataFase,
		rep.VAR_MAX_PROFILO AS VarMassimoProfiloFinanziario,
		--V
		CASE
			WHEN rep.VAR_COMPLESSIVO IS NULL THEN rep.VAR_COMPLESSIVO
			ELSE ROUND(rep.VAR_COMPLESSIVO,2)
		END AS VarComplessivo,
		rep.VAR_COPERTURA AS Copertura,
         rep.RISKCLASS,
         rep.RISKCLASSMAX,
		case when rep.RISKCLASS is null then 'n.a.'
			 else null
		end as RiskClassString,
		case when rep.RISKCLASSMAX is null then 'n.a.'
			 else null
		end as RiskClassMaxString
	FROM
		C6MartPeriodico.MONITORAGGIO_INIZIALE INI
        left outer join
        C6MartPeriodico.MONITORAGGIO_REPORT rep
        on 
        REP.RETE=INI.RETE
        AND 
        REP.COD_FISCALE=INI.COD_FISCALE
	WHERE
		rep.RETE = @Rete AND
		rep.COD_FISCALE = @CodiceFiscale
	AND INI.DATA_FOTO < ISNULL(REP.DATA_INVIO,cast('29991231' as datetime))
		and ISNULL(DATA_INVIO,cast('29991231' as datetime))<@datacongelamento
	UNION ALL
	-- Situazione corrente
	SELECT
	@rete,
	@codicefiscale,
		3 fase,
		CASE
			WHEN @DataCongelamento IS NULL THEN GETDATE()
			ELSE @DataCongelamento
		END AS DataFase,
		CR.MAX_VAR AS VarMassimoProfiloFinanziario,
		--V
		CASE WHEN RA.VAR_PERC_PTF IS NULL THEN 0.00
			 ELSE ROUND(RA.VAR_PERC_PTF,2)
		END  AS VarComplessivo,
		CASE
			WHEN (@contaPOS - @contaCC = 0 ) THEN 100
			ELSE isnull(RA.COPERTURA,0) 
		END AS Copertura,
-- TRINGALI MODIFICARE
       ra.creditrisk as RISKCLASS,
        mifid.riskclass as RISKCLASSMAX,
		case when ra.creditrisk is null then 'n.a.'
        else null end   as RiskClassString,
		case when  mifid.riskclass is null then 'n.a.'
              else null end as RiskClassMaxString
	FROM
        C6MartPeriodico.vPatrimonioBFAggregato AS BF
	INNER JOIN C6MartPeriodico.MIFID AS MIFID
		ON 	BF.RETE = MIFID.RETE
		AND BF.COD_FISCALE = MIFID.COD_FISCALE
	INNER JOIN C6MartPeriodico.CODIFICA_RISCHIO AS CR
		ON MIFID.PROFILO_ASS = CR.PROFILO
	LEFT OUTER JOIN C6MartPeriodico.RISCHIO_AGGREGATO AS RA
		ON 	RA.RETE = BF.RETE
		AND RA.COD_FISCALE = BF.COD_FISCALE
		AND RA.COD_AGGREG = 'COMPLESSIVO|BF'
	WHERE
		BF.RETE = @Rete AND
		BF.COD_FISCALE = @CodiceFiscale
END 
ELSE
BEGIN
 insert into c6martperiodico.tb_S80BisEvoluzioneRischio	 
 ( rete,codicefiscale,fase,datafase,VarMassimoProfiloFinanziario,VarComplessivo,Copertura)
	SELECT
	@rete,
	@codicefiscale,
		2 AS Fase,
		DATA_INVIO AS DataFase,
		VAR_MAX_PROFILO AS VarMassimoProfiloFinanziario,
		--V
		CASE
			WHEN VAR_COMPLESSIVO IS NULL THEN VAR_COMPLESSIVO
			ELSE ROUND(VAR_COMPLESSIVO,2)
		END AS VarComplessivo,
		VAR_COPERTURA AS Copertura
	FROM
		C6MartPeriodico.MONITORAGGIO_REPORT
	WHERE
1=2
END
       SELECT @Index = @Index + 1
    END
     SELECT count(*) FROM @testTab
END