﻿-- =============================================  
-- Author:  <Author,,Name>  
-- Create date: <Create Date,,>  
-- Description: <Description,,>  
-- =============================================  
--[C6MartPeriodico].[PL_S80BisEvoluzioneRischio]'F','02392500605S'  
CREATE procedure [C6MartPeriodico].[Popola_S80BisEvoluzioneRischio_20171222]  
AS  
BEGIN  
 -- SET NOCOUNT ON added to prevent extra result sets from  
 -- interfering with SELECT statements.  
 SET NOCOUNT ON;  
 DECLARE @DataCongelamento DATETIME  
 SET @DataCongelamento = C6MartPeriodico.getDataCongelamento()  
truncate table c6martperiodico.tb_S80BisEvoluzioneRischio  
insert into c6martperiodico.tb_S80BisEvoluzioneRischio    
 SELECT  
 ini.rete,  
 ini.COD_FISCALE,  
  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  
 UNION ALL  
 -- Precedente invio report  
 SELECT  
 rep.RETE ,  
  rep.COD_FISCALE ,  
  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    
      -- modifica del 24/7/2017 per gestire le situazioni limite dell'avvio monitoraggio a cavallo tra 2 trim (vedi segnalazione
	 --   del qc su cf F/TRRLDA52D04G190A)
           --INI.DATA_FOTO < ISNULL(REP.DATA_INVIO,cast('29991231' as datetime))  
	 CONVERT(varchar,ini.data_foto,112) <= convert(varchar,ISNULL(REP.DATA_INVIO,cast('29991231' as datetime)),112)
	 -- fine modifica del 24/7/2017
  and ISNULL(DATA_INVIO,cast('29991231' as datetime))<@datacongelamento  
 UNION ALL  
 -- Situazione corrente  
 SELECT  
 BF.RETE ,  
  BF.COD_FISCALE,  
  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,  
  isnull(RA.COPERTURA,0) 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'  
-- Aggiornamento Copertura    
update s80  
 set copertura = ( CASE  
   WHEN (nocc - CC = 0 ) THEN 100  
   ELSE copertura  
  END )  
 from c6martperiodico.tb_S80BisEvoluzioneRischio s80  
 inner join (  
 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  
 ) as tabCount  
     on tabcount.rete= s80.rete and tabcount.cod_fiscale=s80.codicefiscale  
-- Aggiornamento   
 SELECT RETE,COD_FISCALE, COUNT(*)  tot  
 into #ini  
 FROM  
 C6MARTPERIODICO.MONITORAGGIO_INIZIALE  
 group by RETE,COD_FISCALE  
    having count(*) = 0  
   SELECT RETE,COD_FISCALE, COUNT(*) tot  
   into #att  
 FROM  
 C6MARTPERIODICO.MONITORAGGIO_ATTUALE  
 group by RETE,COD_FISCALE  
  having count(*) = 0  
   SELECT RETE,COD_FISCALE, COUNT(*) tot  
   into #ris  
 FROM  C6MARTPERIODICO.RISCHIO_AGGREGATO  
 group by RETE,COD_FISCALE  
  having count(*) = 0  
  delete  s80   
  from c6martperiodico.tb_S80BisEvoluzioneRischio s80  
  inner join (   
  select distinct   
   case when #ini.rete is null   
   then   
   case when #att.rete is null   
     then #ris.rete   
     else  #att.rete  
   end           
    else  #ini.rete  
   end rete,        
   case when #ini.cod_fiscale is null   
   then   
   case when #att.cod_fiscale is null   
     then #ris.cod_fiscale   
     else  #att.cod_fiscale  
   end           
    else  #ini.cod_fiscale  
   end codicefiscale  
  from #ini    
   right JOIN #att on  #ini.rete = #att.rete and #att.cod_fiscale=#ini.cod_fiscale  
   right JOIN #ris on  #ini.rete = #ris.rete and #ris.cod_fiscale=#ini.cod_fiscale  
   ) cont   
   on cont.rete=s80.rete and cont.codicefiscale=s80.codicefiscale  
END